2012-12-09 68 views
1

我有這個漂亮的函數遍歷集合中的屬性和值的模型。如果它發現它的值返回true。Backbone集合通過模型屬性搜索 - 正確地完成

看過大量的文檔之後,我仍然對如何正確遍歷 集合以及如何搜索它感到困惑。由於underscorejs(在我的情況lodash)掛到主幹我做遍歷與。每個

收藏我並沒有把一個else if (model.get(attribute)===value)後,因爲它會在整個集合穿越之前返回false 。回調函數聽起來像不必要的複雜化 - 但也許我錯了(我幾個月前開始與JS)

我會很高興提示和/或更好的解決方案;-)與explonation。 在此先感謝。

我用requirejs,這就是我爲什麼通過_,Bacbkone ...

這裏是收藏的樣子:

function (_, Backbone, AppModels) { 

    var QueriesCollection = Backbone.Collection.extend({ 
     model : AppModels.QueryModel, 

     search: function (attribute, value) { 
      var found = false; 
      this.each(function (model) { 
       if (model.get(attribute)===value) { 
        found = true; 
       } 
      }); 
      return found; 
     } 
    }); 

    return { 
     QueriesCollection: QueriesCollection 
    }; 
}); 

回答

6

您還可以使用下劃線some(又名any) ,它幾乎與您的search函數相同,除了函數參數用作其謂詞而不是鍵/值之外:

返回如果列表中的任何值通過迭代器真相測試,則爲true。如果找到了真實元素,則短路並停止遍歷列表。

實現中使用,這是一個有點更直接:

search: function (attribute, value) { 
    return this.some(function(x) { 
     return x.get(attribute) === value; 
    }); 
} 
+0

謝謝@dbaseman - 看起來像一個更好的解決方案。骨幹集合是否繼承了所有的下劃線方法_directly_(可通過集合。點符號訪問)?我希望閱讀文檔更好;) – Inoperable

+0

他們這樣做,是的 - 在骨幹文檔中看到這個部分,它指出Backbone集合代理所有Underscore方法:http://backbonejs.org/#Collection-Underscore-方法 – McGarnagle

相關問題