Я думаю, что не совсем понимаю правильное использование маршрутизаторов Backbone . Вот что у меня есть:
У меня есть некоторые данные, которые я беру с сервера при загрузке страницы и затем упаковываю в модели и коллекции. Количество этих моделей и коллекций неограниченно. Я хочу использовать маршрутизатор, чтобы иметь возможность отображать представление определенной коллекции непосредственно с самого начала.
Проблема: Магистральный маршрутизатор запускается рано, и поскольку я прошу его получить доступ к определенному представлению и запустить его действие render
, он не может этого сделать, потому что эти представления еще не созданы. Это означает, что мне действительно нужно запустить мои маршруты после завершения выборки.
Я не знаю, правильный ли это способ сделать это, но я пришел к единственной идее:
Backbone.history.start ();
в отдельную функцию верхнего уровня (т.е. подготовьте ее к вызову вручную позже). success
для моей коллекции fetch ()
_. Defer ()
и _. Once ()
. Это работает, но выглядит очень странно:
Маршрутизаторы:
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();
});
Коллекция:
window.CardsCollection = Backbone.Collection.extend({
model: Card,
initialize: function(params) {
/** … **/
// Get the initial data
this.fetch({success: function() {
_.defer(startRoutes);
}});
},
});
Итак, мой вопрос… правильно ли я делаю? Или есть лучший способ сделать это (должен быть)?