Каков наилучший подход к "принуждению" модели крюка к стрельбе?

Я использую 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, контроллер будет использовать свежеприобретенную модель.