Каков наилучший подход к "принуждению" модели крюка к стрельбе?
Я использую ember.js 1.2 и один из моих маршрутов имеет очень динамическую модель. Когда я прыгаю в маршрут в первый раз или когда я вставляю url-адрес, срабатывает модельный крюк маршрута, затем запускается контроллер настройки, и все работает так, как ожидалось.
проблема возникает, когда я прихожу в маршрут позже (но не из url напрямую) -это только попадает в крючок setupController (и метод модели никогда не срабатывает). Но технически то, что изменилось, - это 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
крюк.
поэтому, когда вы переопределяете модель с моделью fetched dogs и передаете ее _super
, контроллер будет использовать свежеприобретенную модель.