我有一个像这样的动态细分路径 -
@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'
找到计算属性错误:传递的上下文对象多于路径的动态段:错误
未捕获错误:断言失败:错误:传递了更多上下文对象,而不是路径的动态段:错误
答案 0 :(得分:0)
查看您的代码,我认为您的意图是在加载产品后加载关联的所有者。我还假设您要将产品id
和owner_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'}
数据表示它还应将所有者作为侧载数据返回。
希望有一些帮助!