如何在嵌套路由中传递模型 - emberjs

时间:2014-05-28 13:41:04

标签: javascript ember.js routes

我有一些嵌套路线。

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}}的客户模板。但如果我想将上下文传递给“联系”模板,它就不起作用。

这是JsBin http://emberjs.jsbin.com/EveQOke/107

1 个答案:

答案 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');
  }
});

http://jsbin.com/EveQOke/110/edit