我有一个Backbone Collection
var users = Backbone.Collection.extend({
url: 'https://localhost:2222/users',
model: User
});
在控制器中我不需要用户。
var usersList = new Users();
usersList .fetch({
beforeSend: CommonUtils.sendAuthentication,
data: $.param({ group: group.id})
});
我尝试了usersList.length它返回0但是控制台在'usersList'
中显示了一些数据
我记录了
console.log(usersList);
console.log(usersList.length);
'child'对象长度中的显示为0,但在该长度内是4。
答案 0 :(得分:2)
您确定在fetch
进入后计算长度吗?请记住,提取需要一些时间,而您的javascript将不会等待它。
答案 1 :(得分:1)
默认情况下,Backbone .fetch()
会使异步 HTTP(Ajax)请求无法立即完成,因此您必须使用 { {strong} success
会在 error
从服务器返回响应后相应触发的{1}} 和 .fetch()
回调函数。
success
和 error
都会收到提取的集合,服务器响应和选项对象。
简单示例:
usersList.fetch({
success: function(collection, response, options){
console.log(collection.length);
// Method which would use your fetched colletion
myFancyMethodUsingCollection(collection);
},
error: function(collection, response, options){
}
});
要展开,Backbone collection.fetch([options])
基于Backbone.sync(method, model, [options])
,它基于jQuery.ajax
,默认情况下执行异步请求。
.fetch()
的行为可以通过将选项传递给方法来修改。
选项可能包含Backbone 的设置(例如:静态提取,不会触发集合changed
事件等等。)或jQuery.ajax设置。
请注意,jQuery不鼓励使用async: false
选项。
同步请求可能会暂时锁定浏览器,禁用任何请求 请求处于活动状态时的操作。截至jQuery 1.8,使用 async:false,不推荐使用jqXHR($ .Deferred);你必须使用 取而代之的是成功/错误/完整的回调选项。