Как дочерний маршрут (или ресурс) может получить доступ к родительской модели ресурсов из крючка модели?

Как и в случае вложенных маршрутов, каждый маршрут model вызывает вызов до вызова любого из setupController. Итак, как безопасный доступ детского маршрута к родительской модели?

В моем случае модели не являются фактически сохраняющимися объектами. Они оба сгенерированы на основе параметров в модельных крючках. Поэтому я бы не подумал, что Parent.find()/ajax/обещание похоже на путь. В идеале родительская модель должна быть доступна через ParentController, no? Или этот подход не соответствует лучшим практикам?

App.Router.map(function() {
  this.resource("parent", { path: "parent/:name" }, function() {
    this.route('child');
  });
});

App.ParentRoute = Ember.Route.extend({
  model: function(params) {
    // build a model here, based on params.
    // no asynch stuff happening, should be good to go.
    return { lastName: params.name }
  },

  setupController(controller, model) {
    controller.set('model', model);
  }
});

App.ChildRoute = Ember.Route.extend({
  model: function(params) {
    parentModel = this.controllerFor('parent').get('model');
    return {lastName: parentModel.get('name') + 'son' };

    // parent Model is null
    // need the parent model HERE, 
    // but I can't get it through the controller yet
    // as setupController in the parent route hasn't been called yet
  }
});

Ответ 1

modelFor

Как я пропустил это?

App.ChildRoute = Ember.Route.extend({
  model: function(params) {
    parentModel = this.modelFor('parent');
    return {lastName: parentModel.get('name') + 'son' };
  }
});