我有两种模式:
App.Providers = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
logo: DS.attr('string'),
products: DS.hasMany('App.Products')
});
App.Products = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string')
provider: DS.belongsTo('App.Providers'),
});
他们都使用相同的适配器。但是,对于Products模型,我想在URL上附加一个额外的url参数(api密钥)。如何扩展适配器(或串行器?)来实现它?
所以,只是为了给我一个例子,当我想为提供者做GET时:
http://example.com/ap1/v1/providers/
和产品:
http://example.com/ap1/v1/products/?api_key=1234
我知道我可以在App.Products.find({api_key=1234})
时添加此内容,但是当我这样做时会出现问题:
var providers = App.Providers.find(1);
providers.get('products');
编辑: 我试图在适配器中覆盖buildURL方法,但它不是很方便,因为我只想为某些模型附加api_key参数。
答案 0 :(得分:4)
您应该创建第二个适配器来覆盖buildURL方法。然后为应该使用api密钥的任何类型注册该适配器。
apiAdapter = originalAdapter.extend({
buildURL: ....
}));
Store.registerAdapter(App.Providers, apiAdatper);
有关每类型适配器的更多详细信息,请参阅此帖子:How to use DS.Store.registerAdapter