簡體   English   中英

For Loop over Backbone Collection

[英]For Loop over Backbone Collection

骨干相當新,所以這是一個非常基本的問題。 我有一個Backbone集合傳遞給一個函數,我可以證明它已經通過,並且集合中的模型有id。

這是我如何設置ID -

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)

我看到兩個未定義的。 它是否正確? 如果是這樣,為什么我不能使用for循環來通過骨干集合? 還有,我有辦法嗎?

Backbone集合不是一個數組,所以for ... in將不會產生你期望的結果。 如果要使用簡單循環,則需要查看集合的models屬性。

但是,Backbone集合中混合了各種Underscore方法

下划線方法(28)

Backbone代理Underscore.js,在Backbone.Collection上提供28個迭代函數。 它們並未全部記錄在案,但您可以查看Underscore文檔以獲取完整的詳細信息......

  • forEach(每個)
  • ...

因此,如果您想避免訪問models屬性,可以使用mappluck

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

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

您希望遍歷集合的models屬性 ,而不是集合對象本身。

for object in object.models

這將為您提供集合中的模型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM