子模型(或资源)如何从模型钩子中访问父资源的模型?

dou*_*lea 11 ember.js ember-router

似乎在嵌套路由的情况下,model在调用任何setupController钩子之前调用每个路径的钩子.那么孩子如何安全地访问父母的模型呢?

就我而言,模型实际上并不是持久化实体.它们都是基于params在模型钩子中生成的.所以我不认为Parent.find()/ ajax/promise似乎是要走的路.理想情况下,父模型应该可以访问ParentController,不是吗?或者这种方法不符合最佳做法?

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
  }
});
Run Code Online (Sandbox Code Playgroud)

dou*_*lea 28

modelFor

我怎么想念那个?

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

  • 谢谢@doublea.我想进一步澄清你传递给`modelFor`的论点是你想要的模型的父路线的名称.例如`user`,`user.posts`等.[这里是文档](http://emberjs.com/api/classes/Ember.Route.html#method_modelFor). (7认同)