我正在制作我的第一个backbone.js应用程序并且遇到了一些问题。也许有人可以帮助我克服这个障碍(我理解的差距)。我想要/需要做的是将收集数据返回到我的路由器,所以我可以将它绑定到Kendo UI Grid,但我没有在我的收藏中看到任何搜索结果...我想我必须是缺少一些基本的东西,但我不确定它是什么。
这是我到目前为止所做的:
ES.Router = Backbone.Router.extend({routes: {
'': 'search',
'search': 'search',
'results': 'results'
},
results: function() {
var resultsData = new ES.Results();
var boo = resultsData.fetch({
data: JSON.stringify({"query":"myquery"}),
type: 'POST',
contentType: 'application/json'
});
console.log(boo);
}});
ES.Result = Backbone.Model.extend();
ES.Results = Backbone.Collection.extend({
model: ES.Result,
url: '/search/query'
});
答案 0 :(得分:2)
这里有一些问题:
url
作为一个函数,以避免尝试手动修改AJAX请求选项。fetch
调用始终是异步的,因此您需要在选项哈希中添加success
回调,或者向集合的reset
事件添加侦听器我会写这样的集合:
ES.Results = Backbone.Collection.extend({
initialize: function() {
this.query = "test";
},
model: ES.Result,
url: function() {
return '/search/query?query=' + this.query;
}
});
然后在创建集合时设置搜索:
var resultsData = new ES.Results();
resultsData.query = "soccer";
使用success
和/或on("reset")
事件来处理结果:
resultsData.on("reset", function(collection) {
console.log(collection);
});
console.log("Fetching....");
resultsData.fetch({
success: function(collection, response) {
console.log("Got data!" + collection.length);
},
error: function(collection, response) {
console.log("Error: " + response.responseText);
}
});