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

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

Я использую 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);
    });
  }
});
4b9b3361

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