获得Backbone收集大小?

时间:2014-10-17 13:31:09

标签: backbone.js

我有一个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'

中显示了一些数据

enter image description here

我记录了

console.log(usersList);
console.log(usersList.length);
'child'对象长度中的

显示为0,但在该长度内是4。

2 个答案:

答案 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);你必须使用   取而代之的是成功/错误/完整的回调选项。