我试图让Backbone.ajax返回集合“集合”。我需要在程序的另一部分中使用Model。
我想使数据与ajax方法在同一级别上可用。
Backbone.ajax({
dataType: "jsonp",
url: "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=25",
data: "",
success: function(val){ val
var Model = Backbone.Model.extend({});
var Collection = Backbone.Collection.extend({
model:Model
});
collection = new Collection(val);
console.log(collection);
}
});
答案 0 :(得分:12)
不要!您的连接的存在几乎永远不会取决于任何“ajax”调用!您需要在ajax调用之前的某个位置移动集合的定义和实例,然后在ajax调用之前的某个位置移动集合的定义和实例,然后在成功方法或类似的东西中仅移动reset
或add
集合。您需要外部它,以便您可以在实际需要数据之前定义所有视图绑定等;否则你最终会陷入一团糟 - 你正试图通过使用Backbone 避免。
//definitions
var MyModel = Backbone.Model.extend({});
var MyCollection = Backbone.Collection.extend({
model:Model
});
//wherever you need a collection instance
collection = new MyCollection();
//wherever you need to do the ajax
Backbone.ajax({
dataType: "jsonp",
url: "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=25",
data: "",
success: function(val){
collection.add(val); //or reset
console.log(collection);
}
});
答案 1 :(得分:3)
您可以像这样对函数应用回调:
function ajaxCall(callback) {
Backbone.ajax({
dataType: "jsonp",
url: "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twitterapi&count=25",
data: "",
success: function (val) {
var Model = Backbone.Model.extend({});
var Collection = Backbone.Collection.extend({
model: Model
});
collection = new Collection(val);
callback(collection);
}
});
}
ajaxcall(function (collection) {
//do something with the collection when the callback is returned
});
执行该函数时,它将等待回调执行函数内的任何内容。因此,我建议您为AJAX调用失败的情况添加回调。