2014-10-17 156 views
0

我有一個骨幹集合獲得Backbone集合大小?

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); 

一些數據 '子' 對象長度示出了如0但在裏面的長度是4.

+3

你可能想傳遞[成功回調(http://backbonejs.org/#Collection-fetch)到取功能並在那裏得到計數? – 2014-10-17 13:35:13

+0

請記住,console.log通常會將實時引用放入控制檯,因此當您調用console.log時,您在控制檯中看到的內容並不總是出現的內容。嘗試'console.log(usersList.toJSON())',你會明白我的意思。 – 2014-10-17 17:27:24

回答

2

你確定你是countinti在fetch進入後的長度?記住提取需要一些時間,你的javascript不會等待它。

1

默認骨幹.fetch()使得其沒有完成馬上異步 HTTP(阿賈克斯)的要求,這就是爲什麼你必須使用success並會相應.fetch()之後被解僱error回調函數返回來自服務器的響應。

兩個successerror接收牽強收集,服務器響應和選擇對象。

簡單的例子:

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){ 

    } 
}); 

擴大,骨幹collection.fetch([options])基於Backbone.sync(method, model, [options])其基於jQuery.ajax它默認執行異步請求。

.fetch()的行爲可以通過將選項傳遞給方法來修改。

選項可能包含Backbone 的設置(例如,靜音獲取不會觸發集合changed事件等)。或jQuery.ajax設置。

請注意,使用async: false選項是不鼓勵jQuery。

同步請求可能會暫時鎖定瀏覽器,並在請求處於活動狀態時禁用任何 操作。從jQuery 1.8開始,不贊成使用 async:false和jqXHR($ .Deferred)。您必須改用 成功/錯誤/完整回調選項。