2014-02-12 2 views
1

Я загружаю данные из API JSON. Мои маршруты почти всегда должны извлекать новые данные с сервера. У меня нет контроля над форматом API.Ошибка обжига при загрузке асинхронных маршрутов

Я пытаюсь использовать функциональные возможности, описанные в Ember Asynchronous Routing guide. В частности, я возвращаю обещание в крюке model маршрута, чтобы я задерживал переход на маршрут до загрузки данных (и показывая индикатор загрузки).

Все (actions.loading, afterModel и т. Д.), Казалось, работает, как описано в руководстве. Тем не менее, я получаю ошибку showstopper всякий раз, когда я перехожу на маршрут, которым я был раньше.

Это JSBin минимальный пример, который использует те же версии Эмбер и его зависимостей, которые включены в Starter Kit:

http://jsbin.com/zorey/1/edit?html,js,output

Нажмите на имя, вернитесь назад, а затем щелкните второе имя. Вы увидите эту ошибку в своей консоли:

Error while loading route: TypeError: Object #<Object> has no method 'apply' 

Что я делаю неправильно?

+1

взято из документа ember: Примечание. Маршрут с динамическим сегментом будет иметь только вызываемый крючок модели, когда он вводится через URL-адрес. Если маршрут вводится через переход (например, при использовании помощника link-to Handlebars), то контекст модели уже предоставляется и крючок не выполняется. Маршруты без динамических сегментов всегда будут выполнять крючок модели. URL: http://emberjs.com/guides/routing/specifying-a-routes-model/ – fanta

+0

@fanta Спасибо! Итак, каков правильный способ сделать это? И почему он работает при первом входе в маршрут? –

ответ

2

Глядя на ваш jsBin, вопрос здесь:

afterModel: function(response, transition) { 
    this.set('model', response); 
    console.log('DONE LOADING'); 
} 

Вы никогда не должны установить модель в челноке «afterModel». Это не только необязательно (модель получает значение возвращаемого значения в «крючке модели»), но это может вызвать некоторые неприятные проблемы с шаблонами hook.

Просто удалите строку

this.set('model', response); 

, и вы должны быть золотыми.

Смежные вопросы