在我看来,显示嵌套模板实际上是 Ember 优于其他框架的地方。
使用嵌套资源应该非常简单。在您的路由器中,您可以执行类似的操作
App.Router.map(function() {
this.resource('products', function() {
this.route('product', { path: '/product_id' });
});
});
显然,您必须在每个相应的路线中获取数据。类似的东西
App.ProductsRoute = Ember.Route.extend({
model: function() {
this.store.find('product');
}
});
App.ProductsProductRoute = Ember.Route.extend({
model: function(params) {
this.store.find('product', params.product_id);
}
});
在您的 product 模板中,您需要包含一个 {{outlet}} 以供所有要渲染到的子路由(即 products.product)。
例如
product.handlebars
{{#each}}
{{name}}
{{/each}}
{{outlet}}
products/product.handlebars
Product: {{id}}
查看资源部分in the guides。
编辑
如果您希望主列表在products 模板和products.product 模板之间显示不同,请从products 模板中删除主列表并将其放入products.index 和 products.product 模板。
然后指定 ProductsIndexController 和 ProductsProductController needs 其父模型。这将使两个模板都可以通过controllers.products 访问产品。
App.ProductsIndexController = Ember.ObjectController.extend({
needs: 'products',
products: Ember.computed.alias('controllers.products')
});
App.ProductsProductController = Ember.ObjectController.extend({
needs: 'products',
products: Ember.computed.alias('controllers.products')
});
参见this jsbin 和associated guides。