12

對於骨幹網來說是新手,所以這是一個非常基本的問題。我有一個Backbone集合傳入一個函數,我可以證明它已通過,並且集合中的模型具有ID。For Back over Backbone Collection

下面是我如何設置IDS -

convertToMapObjects: (results) => 
    objectList = new ObjectList() 
    results.each(result)-> 
    testObj = new TestObject() 
    testObj.set 
     id = result.get("id") 
    objectList.add(testObj) 

而在其他功能(通過製作模型訪問觸發事件) -

getIds: (objects) => 
ids = (object.id for object in objects) 

我認爲這個問題可能是因爲我是如何迭代整個系列的,因爲當我試着做

for object in objects 
    console.log(object) 

我看到了兩個undefi非執行董事。它是否正確?如果是這樣,爲什麼我不能使用for循環來通過骨幹收集?另外,有沒有辦法我可以這樣做?

回答

20

Backbone集合不是一個數組,因此for ... in不會產生您期望的結果。如果你想使用簡單的循環,你想看看集合的models屬性。

然而,骨幹集合具有various Underscore methods mixed in

下劃線方法(28)

骨幹代理來Underscore.js提供關於Backbone.Collection 28個迭代函數。他們是不是所有的記錄在這裏,但你可以看看下劃線文檔的全部細節...

  • 的forEach(每個)
  • ...

這樣你就可以使用mappluck如果你想避免訪問models property

ids = objects.map (m) -> m.id 
ids = objects.pluck 'id' 

pluck方法或多或少只是map的特例,但集合實現了本機版本而不是使用Underscore版本,因此它們可以採用模型屬性而不是簡單的對象屬性。

+0

這恰恰回答了我的問題,在一個模型 - 謝謝 – praks5432 2012-08-02 20:46:54

4
for object in object.models 

這會給你收集