我希望以非RESTful方式获取我的收藏,因此我决定使用
覆盖Collection.fetch
App.carClc = Backbone.Collection.extend({
model : App.cardModel,
url : 'http://localhost/bbtest/data.php',
fetch : function() {
$.ajax({
type : 'GET',
url : this.url,
success : function(data) {
console.log(data);
}
});
}
});
我不知道如何将我的集合设置为响应。我是BackboneJS的新手,谢谢大家!
答案 0 :(得分:57)
如果您要向fetch
添加自定义“装饰器”,但不能完全覆盖它,请尝试:
var MyCollection = Backbone.Collection.extend({
//custom methods
fetch: function(options) {
//do specific pre-processing
//Call Backbone's fetch
return Backbone.Collection.prototype.fetch.call(this, options);
}
});
在这里,您不必推出自己的$.ajax
另外,如果要使用Backbone的return
方法返回的jQuery保证,请不要忘记最后一行中的fetch
。
有关详细信息,请参阅http://japhr.blogspot.in/2011/10/overriding-url-and-fetch-in-backbonejs.html。
答案 1 :(得分:30)
Backbone集合有两种方法来设置新数据的添加和重置。假设您想要使用传入数据替换所有收集数据,因此使用重置:
App.carClc = Backbone.Collection.extend({
model : App.cardModel,
url : 'http://localhost/bbtest/data.php',
fetch : function() {
// store reference for this collection
var collection = this;
$.ajax({
type : 'GET',
url : this.url,
dataType : 'json',
success : function(data) {
console.log(data);
// set collection data (assuming you have retrieved a json object)
collection.reset(data)
}
});
}
})
答案 2 :(得分:3)
我正在使用这样的东西:
$.when( $.ajax( URL, { dataType: "json" } ) )
.then( $.proxy( function( response ) {
ctx.view.collection.reset( response );
},ctx ) );
我使用collection.reset(data)
重新初始化集合的主要观点
答案 3 :(得分:2)
如果您想继续获取承诺“可以”,那么您也可以这样做:
fetch: function() {
var self = this,
deferred = new $.Deferred();
$.get(this.url).done(function(data) {
// parse data
self.reset({parsed data});
deferred.resolve(); //pass in anything you want in promise
});
return deferred.promise();
}
答案 4 :(得分:0)
如果您需要为每个模型和/或集合执行此操作,请覆盖Backbone.ajax
。
覆盖Backbone.ajax
会为您提供通常传递给options
的请求$.ajax
。您只需要返回$.ajax
(或其他Promise
)的响应,而无需担心在集合/模型中设置内容。