我刚刚开始使用Backbone.js,我正在开发一个应用程序,现在使用Brunch对外部API执行JSONP请求以填充我的集合和模型。我正在关注以前的帖子(this和this)关于使用Backbone执行JSONP请求,但由于某种原因,我的收藏仍然没有获取数据。
我的模型(app / models / model.js):
module.exports = Backbone.Model.extend({
});
我的收藏(app / models / collection.js):
var Post = require('./model');
module.exports = Backbone.Collection.extend({
model: Post,
url: "http://somedata.com/api/posts/list/stuff",
sync: function(method, model, options) {
options.timeout = 10000;
options.dataType = "jsonp";
options.jsonp = "JSONPcallback";
return Backbone.sync(method, model, options);
},
parse: function(response) {
if (response) {
var parsed = [];
for(var i = 0; i < response.results.length; i++) {
parsed.push(response.results[i][0]);
}
return parsed;
}
}
});
然后,在app / application.js的initialize方法中,我通过以下方式调用它:
var Category = require('models/collection');
this.cat = new Category();
this.cat.fetch();
现在,当我查看console.log中的parse函数时,我看到正在获取的数据,因此请求成功完成。但是,当我的视图被呈现并且我在app / views / view.js中执行console.log(application.cat.models)时,我什么都没得到 - 为什么会发生这种情况?我的模型/集合上的代码有什么问题吗?
此外,JSONP数据具有以下格式,这就是为什么循环使用response.results [i] [0]并返回一个包含所有数据的数组,这应该可以解决问题,对吗?
{"results":[
{"0":{"id":xxx,"title":xxx,"link":xxx},
"description":xxx},
{"0":{"id":xxx,"title":xxx,"link":xxx},
"description":xxx},
{"0":{"id":xxx,"title":xxx,"link":xxx},
"description":xxx},...
]}
非常感谢任何帮助...
答案 0 :(得分:2)
我在这里有2条评论:
我看到你的模型和集合的名称都是module.exports
,通常的做法是将模型设置为单数(module.export)并为这些模型设置复数{{1通常的做法,没有“错误”,否则
您的代码中可以有2个回调,当收集完成取数据(异步事件)时也将module.exports视为您的集合,
一个。你可以这样做:
module.exports
B中。您可以从文档here获得module.exports.fetch({
success : function(data){
console.log(JSON.stringiy(data));
//do remaining programming here
}
});
的事件侦听器,该集合在完成获取时会触发reset
事件,因此可以在集合上添加事件侦听器,如下所示:
reset