Tôi nghĩ rằng tôi hoàn toàn không hiểu ý tưởng đằng sau việc sử dụng các bộ định tuyến Backbone một cách thích hợp. Dưới đây là những gì tôi có:Bộ định tuyến đường trục: chờ dữ liệu được tìm nạp trước tiên
Tôi có một số dữ liệu mà tôi tìm nạp từ máy chủ khi trang tải và sau đó đóng gói nó vào các mô hình và bộ sưu tập. Số lượng các mô hình và bộ sưu tập đó là vô thời hạn. Tôi muốn sử dụng bộ định tuyến để có thể hiển thị trực quan chế độ xem của bộ sưu tập nhất định ngay từ đầu.
Vấn đề là: Bộ định tuyến đường trục khởi động sớm, và vì tôi yêu cầu nó truy cập vào một giao diện nhất định và kích hoạt hành động render
của nó, nó không thể làm điều đó, vì những chế độ xem đó chưa được tạo. Điều đó có nghĩa là tôi thực sự phải làm cho các tuyến đường của tôi khởi động sau khi tìm nạp xong.
Tôi không biết nếu điều này là một cách thích hợp để làm điều đó, nhưng ý tưởng duy nhất mà tôi đã đưa ra là:
- Bó đường nét và các bit
Backbone.history.start();
thành một top-level riêng chức năng có khả năng (tức là chuẩn bị để gọi nó bằng tay sau này). - Run có chức năng như
success
gọi lại chofetch()
- Số bộ sưu tập của tôi trong những bộ sưu tập là không rõ, tôi cũng không có cách nào để tìm hiểu khi tất cả trong số họ đã lấy, và tôi không muốn bắt đầu các tuyến đường nhiều lần. Vì vậy, tôi sử dụng số
_.defer()
và_.once()
.
này hoạt động, nhưng nó chắc chắn trông rất lạ:
Router:
window.startRoutes = _.once(function() {
var AccountPage = Backbone.Router.extend({
routes: {
'set/:id': 'renderSet',
},
renderSet: function(setId) {
/** … **/
// Call the rendering method on the respective CardView
CardsViews[setId].render();
}
});
var AccountPageRouter = new AccountPage;
Backbone.history.start();
});
Bộ sưu tập:
window.CardsCollection = Backbone.Collection.extend({
model: Card,
initialize: function(params) {
/** … **/
// Get the initial data
this.fetch({success: function() {
_.defer(startRoutes);
}});
},
});
Vì vậy, câu hỏi của tôi là ... tôi làm việc đó phải không? Hoặc là có một cách tốt hơn để làm điều này (phải)?
Tại sao thực hiện cuộc gọi ajax ngay lập tức? Tại sao không chỉ đơn giản là render trang với json cần thiết cho databload ban đầu và truyền dữ liệu vào startbone? – redsquare