Ember find()、query()、findAll()的数据混合
Ember Data mix of find(), query(), findAll()
如果我这样做
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)
,但它抛出了一个断言异常,说它需要一个模型而不是一个数组。
我假设您正在使用 RestAdapter,并且您只想对一个模型执行此操作。在这种情况下,您可以通过修改自定义适配器中 BuildURLMixin class. So if you wanted to specify the /models/foo as the url for query then you could implement urlForQuery 的方法来自定义适配器,例如:
urlForQuery(query, modelName) {
return '/models/foo';
},
编辑:如果您想完全控制您的 url,您可以自定义 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:结果查询字符串的附加方式比我想象的要晚。事实上,要做你想做的事,你将不得不为 RestAdapter 自定义 query method of your adapter. If you look at the source,你可以看到它在它调用 url:
的地方添加了查询
return this.ajax(url, 'GET', { data: query });
因此您可以将其自定义为:
return this.ajax(url, 'GET', { });
但您应该注意连锁效应,即根本没有应用任何查询字符串
如果我这样做
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)
,但它抛出了一个断言异常,说它需要一个模型而不是一个数组。
我假设您正在使用 RestAdapter,并且您只想对一个模型执行此操作。在这种情况下,您可以通过修改自定义适配器中 BuildURLMixin class. So if you wanted to specify the /models/foo as the url for query then you could implement urlForQuery 的方法来自定义适配器,例如:
urlForQuery(query, modelName) {
return '/models/foo';
},
编辑:如果您想完全控制您的 url,您可以自定义 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:结果查询字符串的附加方式比我想象的要晚。事实上,要做你想做的事,你将不得不为 RestAdapter 自定义 query method of your adapter. If you look at the source,你可以看到它在它调用 url:
的地方添加了查询return this.ajax(url, 'GET', { data: query });
因此您可以将其自定义为:
return this.ajax(url, 'GET', { });
但您应该注意连锁效应,即根本没有应用任何查询字符串