我有一些嵌套路线。
App.Router.map(function() {
this.route("dashboard", { path: "/dashboard" });
this.resource("customers", { path: "/customers" },function(){
this.resource("customer",{ path: "/:customer_id" },function(){
this.resource("customer.contact",{path:'/contact'});
});
});
});
模板
客户/索引
<script type="text/x-handlebars" data-template-name="customers/index">
<h3>Customers</h3>
<table>
{{#each item in model}}
<tr>
<td>{{item.name}}</td>
{{#link-to "customer" item tagName="td"}}Info{{/link-to}}
</tr>
{{/each}}
</table>
</script>
客户
<script type="text/x-handlebars" data-template-name="customer">
<h3>Customer {{name}}</h3>
{{#link-to}}Gallery{{/link-to}}
{{#link-to "customer.contact" this}}Contact{{/link-to}}
{{outlet}}
</script>
与
<script type="text/x-handlebars" data-template-name="customer/contact">
<h3>Contact info of customer {{name}}</h3>
{{contact}}
</script>
Go Customers-&gt; Info 一切正常,来自“customers / index”模板的链接将项目传递给将使用{{name}}的客户模板。但如果我想将上下文传递给“联系”模板,它就不起作用。
答案 0 :(得分:2)
您需要为客户联系(以及客户)指定路线。它最初工作的原因是因为link-to将模型传递给路径,所以它可以跳过不存在的模型钩子。但是当您刷新页面或点击没有动态段的联系路径时,您需要告诉ember您要使用模型。有一个测试版功能允许资源下的所有路由使用资源,如果他们没有定义另一个资源,但这仍然是一个功能,并且还不是黄金。
App.CustomerRoute = Ember.Route.extend({
model: function(param){
return this.store.find('customer', param.customer_id);
}
});
App.CustomerContactRoute = Ember.Route.extend({
model: function(){
return this.modelFor('customer');
}
});