2013-05-14 51 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);