带有参数的灰色动态段

时间:2014-10-14 23:48:06

标签: ember.js routes ember-data

我有一个像这样的动态细分路径 -

@resource 'owners', { path: "/:owner_id"}
@resource 'product', { path: "products/:product_id" }

产品路线需要来自此路线的信息,并且需要在加载某些产品参数后加载

Market.ProductRoute = Ember.Route.extend({
    model: function(params) {
        return this.store.find('product', params.product_id);
    },
    afterModel: function(model){
        this.store.find('owner', model.get('id'), { 'owner_type':model.get('owner_type')});
    },
});

我收到以下错误:

  

处理路径时出错:产品断言失败:metaForProperty()找不到具有键' owner_type'的计算属性。错误:断言失败:metaForProperty()无法使用键' owner_type'

找到计算属性      

错误:传递的上下文对象多于路径的动态段:错误

     

未捕获错误:断言失败:错误:传递了更多上下文对象,而不是路径的动态段:错误

1 个答案:

答案 0 :(得分:0)

查看您的代码,我认为您的意图是在加载产品后加载关联的所有者。我还假设您要将产品idowner_type发送到您的服务器,因为这是一种多态关系。

您收到有关owner_type错误的错误,因为您传递了一些非常奇怪的内容作为查找which is reserved for indicating data and relationships that you know are already preloaded的第三个参数 - 可能不是您想要的。我不禁注意到CoffeeScript和JavaScript的混合。这让我觉得你错误地认为find是如何工作的,因为你已经习惯让CoffeeScript将你传递给函数的所有键值对收集到一个对象文字中。

第二个错误More context objects were passed...可能是因为当路由器中没有动态段(或动态段不足)时,您有一个链接将对象传递给{{link-to}}助手路径。这很难从发布的代码中分辨出来。

以下是我认为您希望在产品路线中做的事情:

Market.ProductRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('product', params.product_id);
  },

  afterModel: function(model) {
    this.store.find('owner', {
      owner_id: model.get('id'),
      owner_type: model.get('owner_type')
    });
  },
});

如果您可以控制您的API,那么在搜索产品时包含所有者可能会很不错。我有应用程序,有时我想要关联,有时我不想。我经常最终得到这样的路线:

Market.ProductRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('product', {id: params.product_id, include: ['owner']});
  }
});

此时,您的服务器会将此{include: 'owner'}数据表示它还应将所有者作为侧载数据返回。

希望有一些帮助!