Может ли js задержать сопоставление маршрутов / запускать вручную?
У меня есть элемент управления, настроенный так:
- Отображает загруженный вид асинхронно.
- Данные для представления также загружаются асинхронно.
- Слушает изменения маршрута. Один из обработчиков маршрута отображает модальное с деталями модели, загруженной на шаге 2.
Проблема в том, что пользователь может попасть на страницу с маршрутом, указывающим на модель, который недоступен в момент инициализации элемента управления, поэтому, очевидно, модальный режим не загружен.
can.Control({
init: function() {
can.view('file.ejs', {pages: app.Model.Page.findAll()}, function(frag){
// inject the fragment into DOM
});
},
'page/:id/comments route': function() {
// find the page in the list of models loaded, than display the modal
}
});
Как мне снова запустить distcher или заставить контроллер пройти по маршрутам после рендеринга вида?
1 ответ
Если вы храните Deferred, который findAll возвращает куда-то, вы можете использовать это в своем маршруте, чтобы сообщить, когда он загружен.
http://canjs.com/docs/can.when.html
Вот пример, который хранит страницы в this.pages в элементе управления:
(не очень приятно смотреть, но легко понять)
can.Control({
init: function() {
this.pages = app.Model.Page.findAll()
can.view('file.ejs', {pages: pages}, function(frag){
// inject the fragment into DOM
});
},
'page/:id/comments route': function() {
can.when(this.pages).then(function(pages){
// find the page in the list of models loaded, than display the modal
})
}
});