Какой лучший подход "заставить" крюк модели стрелять?
Я использую ember.js 1.2, и один из моих маршрутов имеет очень динамичную модель. Когда я впервые впадаю в маршрут или когда я вставляю URL-адрес, загорается модельный крючок маршрута, затем запускается диспетчер управления, и все работает так, как ожидалось.
Проблема возникает, когда я вхожу в маршрут позже (но не из URL-адреса напрямую) - это только попадает в hookController (и метод модели никогда не срабатывает). Но технически то, что изменилось, - это url (и родительская модель). И с этой моделью она в основном определяется родителем (используя эту родительскую модель для извлечения нового набора динамической конфигурации во время выполнения).
Итак, как я могу заставить setupController повторно запускать крючок модели каждый раз, когда загружается этот конкретный маршрут? (как если бы метод модели срабатывал каждый раз).
Или... Должен ли я извлекать эту динамическую модель в setupController и не допускать логическую логику модели, если она возвращает пустой объект?
Обновление
App.ChildIndexRoute = Ember.Route.extend(App.ModelMixin, {
setupController: function(controller, model) {
this._super(controller, model);
var parent = this.modelFor('parent');
return this.getForParent(parent).then(function(things) {
controller.set('model', things);
});
}
});
Ответы
Ответ 1
Вы можете использовать setupController
hook вместо крючка модели, это вполне приемлемый способ справиться с этим.
И технически переход - это то, что вызывает крючок модели и поставляет его в setupController.
Где в цепочке не стрелять моделью? Здесь простое приложение с несколькими вложенными ресурсами.
http://emberjs.jsbin.com/AtebAsOS/6/edit
Ключевой бит кода в этом примере находится в DogsRoute:
App.DogsRoute = Em.Route.extend({
setupController: function(controller, model){
model = Em.get(this.modelFor('cow'), 'dogs');
this._super(controller, model);
}
});
Из документов:
[Метод setupController
] вызывается с контроллером для текущего маршрута и модель, поставляемая крюком model
.
Поэтому, когда вы переопределяете модель с моделью взятых собак и передаете ее на _super
, контроллер будет использовать только что извлеченную модель.