emberjs 将限制和偏移元数据放入 RESTadapter 中的 headers 中用于 findQuery
emberjs place limit and offset metadata into headers within RESTadapter for a findQuery
如何获取 offset
和 limit
(或与此相关的任何查询),该 find()
从路由发出,如下所示
this.store.find('person', {offset: 0, limit:10});
然后在适配器中获取这两个值以将它们推送为 headers(与 body 相对)
我正在检查 docs regarding metadata 并看到提到 this.store.metadataFor("person");
加上 docs re RESTAdapter 中提到使用注入器获取 authtoken 的示例。
App.ApplicationAdapter = DS.RESTAdapter.extend({
headers: function() {
return {
"API_KEY": this.get("session.authToken"),
"ANOTHER_HEADER": "Some header value"
};
}.property("session.authToken")
});
如何在模型上做类似的 'injector'(相对于 session)。
App.ApplicationAdapter = DS.RESTAdapter.extend({
headers: function() {
var limit = this.get("person.limit"); // injector style ??
//var limit = this.store.metadataFor("person"); //but no ref to store
return {"limit": limit};
}.property("person.limit"),
"the session object has been injected into an adapter by Ember's container." 好像是神秘酱汁的一部分。
tia.
当您在 object 中传递属性以查询商店时,它们最终以 findQuery
方法结束,默认情况下如下所示(参见 here):
findQuery: function(store, type, query) {
return this.ajax(this.buildURL(type.typeKey), 'GET', { data: query });
},
query
作为请求参数传入。我猜你可以在适配器内部重写这个方法并将它们作为 headers 传递。
App.ApplicationAdapter = DS.RESTAdapter.extend({
findQuery: function(store, type, query) {
console.log("OFFSET: " + query.offset);
console.log("LIMIT: " + query.limit);
return this.ajax(this.buildURL(type.typeKey), 'GET', { headers: query });
},
});
适配器使用的 this.ajax
方法调用 jQuery 的 ajax
方法,如您在 here. According to jQuery's documentation, you can pass in headers
as an object (see here 中所见)。因此,在您的情况下,您只需将 data
替换为 headers
即可完成。
Chrome 调试器的输出确认请求 headers 确实被发送:
见下文jsbin
如何获取 offset
和 limit
(或与此相关的任何查询),该 find()
从路由发出,如下所示
this.store.find('person', {offset: 0, limit:10});
然后在适配器中获取这两个值以将它们推送为 headers(与 body 相对)
我正在检查 docs regarding metadata 并看到提到 this.store.metadataFor("person");
加上 docs re RESTAdapter 中提到使用注入器获取 authtoken 的示例。
App.ApplicationAdapter = DS.RESTAdapter.extend({
headers: function() {
return {
"API_KEY": this.get("session.authToken"),
"ANOTHER_HEADER": "Some header value"
};
}.property("session.authToken")
});
如何在模型上做类似的 'injector'(相对于 session)。
App.ApplicationAdapter = DS.RESTAdapter.extend({
headers: function() {
var limit = this.get("person.limit"); // injector style ??
//var limit = this.store.metadataFor("person"); //but no ref to store
return {"limit": limit};
}.property("person.limit"),
"the session object has been injected into an adapter by Ember's container." 好像是神秘酱汁的一部分。
tia.
当您在 object 中传递属性以查询商店时,它们最终以 findQuery
方法结束,默认情况下如下所示(参见 here):
findQuery: function(store, type, query) {
return this.ajax(this.buildURL(type.typeKey), 'GET', { data: query });
},
query
作为请求参数传入。我猜你可以在适配器内部重写这个方法并将它们作为 headers 传递。
App.ApplicationAdapter = DS.RESTAdapter.extend({
findQuery: function(store, type, query) {
console.log("OFFSET: " + query.offset);
console.log("LIMIT: " + query.limit);
return this.ajax(this.buildURL(type.typeKey), 'GET', { headers: query });
},
});
适配器使用的 this.ajax
方法调用 jQuery 的 ajax
方法,如您在 here. According to jQuery's documentation, you can pass in headers
as an object (see here 中所见)。因此,在您的情况下,您只需将 data
替换为 headers
即可完成。
Chrome 调试器的输出确认请求 headers 确实被发送:
见下文jsbin