2013-05-14 79 views
2

我正在尋找一種方法來從骨幹集合中檢索某種特定屬性的數組。從Backbone集合中檢索特定屬性的列表

var SomeModel = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      attr1: "something", 
      attr2: "something", 
      attr3: "darkside" 
     }; 
    } 
}); 

var SomeCollection = Backbone.Collection.extend({ 
    model: SomeModel, 
    url: '/data.json', 
}); 

現在假設我有一些像上面我只想要一個集合/數組/只屬性「attr3」類似。有什麼好的方法來獲得這個(不是通過手動迭代SomeCollection並構建一個新的Collection)?我從下劃線函數「過濾器」的理解是它基於某個前提返回整個SomeModel,即這不是我想要的。想法?

感謝

回答

1

我想你想下劃線的pluck

什麼是可能是最常見的用例爲 圖個方便版本:提取屬性值的列表。

var attrs = _.pluck(someCollection.models, 'attr3'); 
+0

非常感謝,採摘就是我一直在尋找的東西! – 2013-05-15 08:31:33

1

我認爲這裏存在一些誤解更簡潔的版本。在您發佈的代碼中,您爲新創建的模型設置了默認屬性。

var model = new SomeModel({}); 

或:任何模型通過創建

var collection = new SomeCollection(); 
// Add to collection 
collection.add({}); 
// Add to collection AND sync with server 
collection.create({}); 

將設置爲給定的值的屬性,因爲你不傳遞給上述功能的哈希不同的定義。

相反,我覺得你問這個:

collection.pluck(attributeName); 

這本身就是一個功能:

// Create some models 
var model_a = new SomeModel({attr1: "Alpha"}); 
var model_b = new SomeModel({attr1: "Beta"}); 
var model_c = new SomeModel({attr1: "Gamma"}); 

// Push them in the collection 
var collection = new SomeCollection([model_a, model_b, model_c]); 

那麼你可以得到包含請求的模型值的字符串數組屬性繼承自Backbone所依賴的Underscore.js。

我指定此做出明確規定_.pluck(數組的attributeName)也是可用骨幹背景和工作在陣列,不收藏。在內部,collection.pluck調用_.pluck(collection.models,fieldName)。

+0

謝謝,這是我正在尋找的部分,爲了簡化,我在模型和集合中留下了實例化部分。 – 2013-05-15 08:30:58

0
someCollection.pluck.call({ 
    models: someCollection.where({ 
     attribute_name:attribute_value 
    }) 
}, attribute_val_to_fetch);