2013-02-01 33 views
8

Tôi đang nắm bắt được với Backbone.js, nhưng một điều tôi không hiểu là nơi để đặt tất cả các mã jQuery một lần tôi cần thiết lập trang của mình.Backbone.js: Tôi đặt thiết lập jQuery của mình ở đâu?

Bạn biết loại điều: định cấu hình plugin băng chuyền jQuery, thêm mũi tên 'cuộn lên trên' ... cấu hình một lần xảy ra khi người dùng tải trang lần đầu tiên.

Tại thời điểm tôi đang làm nó trong Router của tôi:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
    // some routes 
    }, 
    initialize: function() { 
    initializeJqueryStuff(); 
    } ... 
}); 
var StateApp = new AppRouter(); 
Backbone.history.start({ 
    pushState: true 
}); 
function initializeJqueryStuff() { 
    // one-off jQuery stuff goes here 
} 

Yeuch. Tôi nên làm thế nào? Nên initializeJqueryStuff là một thuộc tính khác của đối tượng Bộ định tuyến không? Nên tất cả chỉ sống bên trong initialize? Hoặc tôi có nên giữ mã này hoàn toàn tách biệt khỏi ứng dụng Backbone không?

+0

Bạn có thể cho tôi một ví dụ về những gì jQuery mã cần phải được thực hiện trên tải trang/app bắt đầu? Tôi thường có mã jQuery trong một khung nhìn. Vì vậy, tùy thuộc vào những gì bạn đang cố gắng để đạt được, bạn có thể có thể có một "Layout View" kích hoạt mã jQuery của bạn sau khi xem đã được hiển thị. Sau đó, một lần nữa tôi sẽ giúp đỡ tốt hơn nếu bạn có thể cho tôi biết mã jQuery cần được khởi tạo khi khởi động ứng dụng. – TYRONEMICHAEL

Trả lời

1

Tôi thường xác định LayoutView, nghĩa là chế độ xem gốc chịu trách nhiệm hiển thị tất cả chế độ xem "thực tế" trong ứng dụng. Chế độ xem bố cục này chỉ được khởi tạo một lần, trước khi bất kỳ mã xem nào khác cần chạy. Đó cũng là nơi tôi có xu hướng thực hiện bất kỳ cấu hình xem một lần nào.

mẫu:

//LayoutView should be considered a singleton, only initialized once 
var LayoutView = Backbone.View.extend({ 
    el:'body', 

    initialize: function() { 
     this.initializeSomejQueryStuff(); 
    }, 

    renderChild: function(child) { 
     if(this._currentChild) 
      this._currentChild.remove(); 
     this._currentChild = child; 
     this.$el.html(child.render().el); 
    }, 

    initializeSomejQueryStuff: function() { 
     //init here 
    } 
}); 

Cách sử dụng:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "foo/:id": "foo" 
    }, 

    initialize: function() { 
     this.layout = new LayoutView(); 
    }, 

    foo: function(id) { 
     var model = new Foo({id:id}); 
     var view = new FooView({model:model}); 

     //delegate the view rendering to a layout 
     this.layout.renderChild(view); 
    } 
}); 
+0

Cách tiếp cận thú vị, cảm ơn bạn! – Richard

0

Hmm ... xin lỗi nếu tôi bỏ lỡ một số chi tiết trong trường hợp tiếng Anh xấu của tôi. Nhưng như tôi có thể thấy điểm chính của câu hỏi của bạn: nơi bạn có thể cấu hình và đặt công cụ jQuery của bạn, mà không liên kết với Backbone? Trong tất cả các bạn có thể tách mã này và chỉ liên kết nó trong .html

Xương sống chỉ một chút MVC. Bạn có thể thao tác các hàm của bạn và một số thứ js liên kết với các khung nhìn trong Backbone.View.extend({...}), nhưng trong tất cả, tôi nghĩ rằng đó là một điểm tốt để tạo cấu trúc khác nhau cho những thứ khác nhau. smth như thế này:

.../ 
    public/ 
     css/ 
     img/ 
     lib/ 
      ..any source code for your plugins.. 
     tpl/ 
      ..for your templates.. 
     js/ 
      models/ 
       models.js 
      views/ 
       ..your views.js.. 
      main.js(your backbone router and for example, .loadTemplate() func for templates and other) 
      ..any code for plugings configuration.. 

Vì vậy, tôi nghĩ cấu trúc đó có thể giúp bạn hiểu rõ nguồn gốc là gì và giúp bạn viết mã rõ ràng.

Hy vọng nó hữu ích cho bạn. Xin lỗi nếu tôi hiểu lầm smth.

+0

OK, cảm ơn. Vấn đề của tôi là tôi cần phải tải mọi thứ trong jQuery trước khi Backbone được bắt đầu (vì các khung nhìn Backbone của tôi có một số sự kiện phụ thuộc vào các phần tử jQuery được khởi tạo chính xác). Nếu tôi bọc cả tệp jQuery và tệp Backbone bên trong '$ (document) .ready()', tôi có thể đảm bảo rằng mọi thứ đều tải đúng thứ tự không? – Richard

+0

@Richard Ahhhh .... Tôi hiểu rồi. Nếu chỉ các khung nhìn phụ thuộc vào một số phần tử jQuery. Chỉ cần đặt tệp với phần tử này ở vị trí trước khi bạn liên kết chế độ xem, từng bước đọc tài liệu. Đầu tiên trong html, lần đầu tiên tải. Hàng đợi tải khác nhau trong các trình duyệt khác nhau, nhưng sẽ không có vấn đề gì khiến tất cả chúng giống như dòng chảy. Chơi nó và thử :) – Pruntoff

Các vấn đề liên quan