App.Router.map(function() {
this.resource('products', function() {
this.resource('product', { path: ':product_id' }, function() {
this.route('general');
});
})
});
App.ProductsRoute = Ember.Route.extend({
model: function() {
return this.store.find('product');
}
});
App.ProductRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('product', params.product_id);
}
});
模板:
<script type="text/x-handlebars" data-template-name="product">
Showing {{ name }}
<p>{{ outlet }}</p>
</script>
<script type="text/x-handlebars" data-template-name="product/general">
General template for {{ name }}
</script>
在/products/3
视图中,name
按预期显示,但不在/products/3/general
视图中显示。谁知道为什么?
我试图复制App.ProductRoute并将其重命名为App.ProductGeneralRoute以找到正确的模型,但是params不存在。
答案 0 :(得分:1)
在Ember中,嵌套路由无法访问其父路径模型。有两种方法可以访问子路径中的父模型。
App.ProductGeneralRoute = Ember.Route.extend({
model: function() {
return this.modelFor('product');
}
});
通过获取ProductGeneral
的模型,在ProductRoute
路线上设置模型。或者您可以使用needs
:
App.ProductGeneralController = Ember.ObjectController.extend({
needs: ['product']
});
在后一个示例中,您可以访问controllers.product
,这样您就可以在模板中调用controllers.product.model
。
有关needs
的详细信息,请参阅this article。