Ember.js Emberjs:访问父路由模型,这是一个承诺(主细节)

Ember.js Emberjs:访问父路由模型,这是一个承诺(主细节),ember.js,master-detail,Ember.js,Master Detail,我有母版详细页面布局如图所示。我通过#/masters/:master_id应用程序url访问此页面 路线a定义如下: App.Router.map(function() { this.resource('masters', { path: '/masters' }, function() { this.route('detail', { path: '/:master_id' }); }); }); App.MastersRoute = Ember.Route.exte

我有母版详细页面布局如图所示。我通过
#/masters/:master_id
应用程序url访问此页面

路线a定义如下:

App.Router.map(function() {
  this.resource('masters', { path: '/masters' }, function() {
       this.route('detail', { path: '/:master_id' });
  });
});

App.MastersRoute = Ember.Route.extend({
   model: function() {
       return App.DataStore.getData('/api/masters'); //returns Promise!
   },

   setupController: function(controller, model) {
      controller.set("content", model);
   }
});

App.MastersDetailRoute = Ember.Route.extend({
   model: function(params) {
      return this.modelFor("masters").find(function(item) {
          return item.get("id") == params.master_id;
      });
   }
});
模板:

<script type="text/x-handlebars-template" data-template-name="masters">
    <div id="masters-grid">
      {{#each master in model}}
         <div {{action "show" master}}>
            {{master.name}}
         </div>
      {{/each}}
    </div>
    <div id="detail">
       {{outlet}}
    </div>
</script>

<script type="text/x-handlebars-template" data-template-name="masters/detail">
   {{model.name}} <br />
   {{model.age}} <br />
   {{model.address}} <br />
</script>

{{#模型中的每个主节点}
{{master.name}
{{/每个}}
{{outlet}}
{{model.name}}
{{model.age}}
{{model.address}}
在网格中单击主控形状时,我希望在详细信息中显示它们的详细信息,并且在更改主控形状选择时,我不希望从API重新加载所有主控形状


我对
MastersDetailRoute
的模型有问题,因为
this.modelFor(“masters”)
返回
未定义的
。我认为,这是由于
模型中的返回承诺造成的。如何在“子路由”模型中从主模型或控制器访问一个项目,有什么想法或解决方法吗?

我在这里看到了一些东西

  • 定义与路由名称具有相同url的路由时,无需指定路径
  • 详图管线也应该是一个资源,因为它是由模型支持的管线
  • 在大师路线中,返回承诺是正确的,并且由恩伯在本地支持。在承诺兑现之前,这条路不会被解决
  • 不需要安装控制器
  • 通常最好执行所需的api调用,以获取细节路由中的单个记录。此选项仅在首次加载页面时使用(如果f5正在加载或来自书签)
  • 在masters模板中,您可以使用id而不是键入数据模板名称,或者更好地使用ember cli/brocolli或grunt来预编译模板
  • 要防止在选择行时余烬重新蚀刻模型,请使用“把手”辅助对象链接
{{{#链接到'masterDetail'master}
{{master.name}
{{/链接到}}

  • 只是澄清一下,以这种方式使用link to将第二个参数中指定的对象作为模型传递给指定的路由(第一个参数)。在您的情况下,master现在将被设置为master detail管线的模型
  • 在masters detail中,无需键入“model”。模板中的默认上下文(即“this”的值)是控制器,如果在控制器上找不到该属性,则会在模型中查找该属性
希望这有帮助