Ember数据不会将参数附加到查询中。我有这样的标签路线
例如
App.TagsRoute = Ember.Route.extend({
model: function(params) {
var tag = params.tag_name;
var entries = this.store.find('entry', {tags: tag});
return entries;
}
});
但这与this.store.find('entry')保持相同的请求。 我做错了吗?
修改:
我的路由器看起来像这样:
App.Router.map(function(){
this.resource('entries', function(){
this.resource('entry', { path: '/entry/:entry_id/:entry_title' });
});
this.route('tags', { path: '/t/:tag_name' });
});
当我请求(例如)localhost:8888 /#/ t / tag
params.tag_name的值是'tag'
EDIT2:
我的REST适配器
App.ApplicationAdapter = DS.RESTAdapter.extend({
bulkCommit: false,
buildURL: function(record, suffix) {
var s = this._super(record, suffix);
return s + ".json";
},
findQuery: function(store, type, query) {
var url = this.buildURL(type.typeKey),
proc = 'GET',
obj = { data: query },
theFinalQuery = url + "?" + $.param(query);
console.log(url); // this is the base url
console.log(proc); // this is the procedure
console.log(obj); // an object sent down to attach to the ajax request
console.log(theFinalQuery); // what the query looks like
// use the default rest adapter implementation
return this._super(store, type, query);
}
});
EDIT3:
对我的TagsRoute对象进行一些更改后,我得到下一个输出:
App.TagsRoute = Ember.Route.extend({
model: function(params) {
var tag = params.tag_name;
var query = {tags: tag};
console.log(query);
var entries = this.store.find('entry', query);
return entries;
}
});
当我请求localhost时,控制台输出:8888 /#/ t / tag
对象{tags:“tag”}
(主机网址)+ api / v1 / entries.json
GET
对象{data:Object}
(主机网址)+ api / v1 / entries.json?tags = tag
类{type:function,query:Object,store:Class,isLoaded:true,meta:Object ...}
Ember数据附加了GET参数。我认为我的错误可能是请求的网址,它应该是这样的
(主机网址)+ api / v1 / tags /:tag_name.json
而不是
(主机网址)+ api / v1 / entries.json?tags =:tag_name
解
ember-data(ember-data 1.0.0-beta.3-16-g2205566)的构建被破坏了。当我将脚本src更改为builds.emberjs.com.s3.amazonaws.com/canary/daily/20131018/ember-data.js时,一切都运行良好。
添加GET参数的正确方法是:
var query = {param: value};
var array = this.store.find('model', query);
感谢您的帮助
答案 0 :(得分:1)
您正在做的一切正确,您确定发送回服务器的请求不包含查询吗?
在JQuery进行调用之前,不会创建完整查询。
您是否查看了chrome(或您使用的任何浏览器)中的网络选项卡,以查看它发回的内容。
在下面的jsbin中观察控制台,它显示了将find与对象一起使用时的情况(用于查询):
App.MyAdapter = DS.RESTAdapter.extend({
findQuery: function(store, type, query) {
var url = this.buildURL(type.typeKey),
proc = 'GET',
obj = { data: query },
theFinalQuery = url + "?" + $.param(query);
console.log(url); // this is the base url
console.log(proc); // this is the procedure
console.log(obj); // an object sent down to attach to the ajax request
console.log(theFinalQuery); // what the query looks like
// use the default rest adapter implementation
return this._super(store, type, query);
},
});
http://emberjs.jsbin.com/AyaVakE/1/edit
其他问题:
点击:http://localhost:8888/#/t/tag
触发标记路由,将'tag'发送到tag_name。您的模型钩子是正确的。你在哪里看到请求是一样的?
此外,您提到了store.find('entries)和store.find('entry')。我知道他们处理大多数事情的多元化,但你应该确保那些最终成为相同的端点/ api /条目。
答案 1 :(得分:0)
RESTAdapter
将查询对象发送到jQuery.ajax()
方法,方法是将其添加到设置对象的data
属性中。 (有关设置对象的操作信息,请参阅here。)
看起来可能没有定义标签名称。尽量确保tag_name
参数正确地来自您的路线。