如果我这样做
this.get('store').findAll('model')
它会向/models
发出请求,并期望array
。另一方面,如果我做
this.get('store').find('model', my_id)
它会向/models/my_id
发出请求,它会期望我的模型有一条记录。方法.query()
基本上会执行GET
请求,其中包含我传递的参数
this.get('store').query('model', {something: 'foo'})
它会向/models?something=foo
提出请求。
我的问题如下:
我可以制作混合上述三种方法的东西吗?我想向路径/models/foo
发出请求,我想要一个数组。
我做了.find('model', params.something)
,但它抛出了一个断言异常,说它期待一个模型而不是一个数组。
答案 0 :(得分:4)
我假设您正在使用RestAdapter而您只想为一个型号执行此操作。在这种情况下,您可以通过修改BuildURLMixin类的方法来自定义适配器。因此,如果您想将/ models / foo指定为查询的url,那么您可以在自定义适配器中实现urlForQuery,如:
urlForQuery(query, modelName) {
return '/models/foo';
},
编辑:如果您想要完全控制您的网址,可以自定义buildUrl
buildURL(modelName, id, snapshot, requestType, query) {
switch (requestType) {
case 'query':
return '/models/' + query.something;
default:
return this._super();
}
},
然后你打电话:
this.get('store').find('model', {something: 'foo'})
它会命中/ models / foo 而没有查询字符串。
EDIT2:原来查询字符串的追加方式比我想象的要晚。事实上,要做你想做的事情,你必须自定义适配器的query方法。如果您查看RestAdapter的source,您会看到它在调用url时添加查询:
return this.ajax(url, 'GET', { data: query });
因此您可以将其自定义为:
return this.ajax(url, 'GET', { });
但你应该知道敲击效果,即根本不应用任何查询字符串