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”的值)是控制器,如果在控制器上找不到该属性,则会在模型中查找该属性
希望这有帮助