模型在子路径中不可用

时间:2013-12-22 09:56:18

标签: ember.js

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不存在。

1 个答案:

答案 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