2013-09-22 1 views
1

У меня есть контроль настроить так:Может ли js отсрочить соответствие маршрута/вручную, вызвав отправку?

  1. визуализирует вид загружен асинхр.
  2. Данные для представления также загружаются асинхронно.
  3. Слушает изменения маршрута. Один из обработчиков маршрутов отображает модальную информацию о деталях модели, загруженной на этапе 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 
    } 
}); 

Как я могу снова запустить диспетчер или заставить контроллер переходить через маршруты после визуализации представления?

+0

Я просто видел параметр 'can.route.ready (false)', но мне хотелось бы что-то более «гибкое», –

ответ

0

Если вы сохранили Отложенное, которое 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 
     }) 
    } 
}); 
Смежные вопросы