3

我有两个模型:

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 参数。

4

1 回答 1

4

您应该创建第二个适配器来覆盖 buildURL 方法。然后为应该使用 api 密钥的任何类型注册该适配器。

apiAdapter = originalAdapter.extend({
  buildURL: ....
}));

Store.registerAdapter(App.Providers, apiAdatper);

有关每种类型适配器的更多详细信息,请参阅此帖子:如何使用 DS.Store.registerAdapter

于 2013-02-05T16:54:51.373 回答