据我所知,使用pluck方法我们可以在主干集合中获取每个模型的一系列属性
var idsInCollection = collection.pluck('id'); // outputs ["id1","id2"...]
我想如果有一个方法为集合中的每个模型设置一个属性,
var urlArray = ["https://url1", "https://url1" ...];
collection.WHAT_IS_THIS_METHOD({"urls": urlArray});
答案 0 :(得分:39)
没有一个预先存在的方法,但是invoke
让你在一行中做类似的事情:
collection.invoke('set', {"urls": urlArray});
如果您想在所有集合上制作可重复使用的set方法,可以执行以下操作:
var YourCollection = Backbone.Collection.extend({
set: function(attributes) {
this.invoke('set', attributes);
// NOTE: This would need to get a little more complex to support the
// set(key, value) syntax
}
});
*编辑*
Backbone已经添加了自己的set
方法,如果你覆盖它,你将完全破坏你的Collection
。因此,上面的示例应该真正重命名为setModelAttributes
或其他任何不是set
的内容。
答案 1 :(得分:9)
我没有方法,但你可以尝试:
collection.forEach(function(model, index) {
model.set(url, urlArray[index]);
});
答案 2 :(得分:0)
扩展David的答案,您可以轻松地将此功能放入集合中的自定义方法。这是我用coffeescript做的方式:
class Collection extends Backbone.Collection
setAll: () ->
_args = arguments
@models.forEach (model) -> model.set _args...
class SomeCollection extends Collection
url: '/some-endpoint.json'
myLovelyCollection = new SomeCollection()
myLovelyCollection.fetch
success: (collection, response) ->
collection.setAll someVar: true
collection.setAll anotherVar, 'test'
如果你想在香草JS中做到这一点,它完全相同,但没有利用类或splats的力量。更像是:
var Collection = Backbone.Collection.extend({
setAll: function () {
var _args = arguments;
this.models.forEach(function (model) {
model.set.apply(model, _args);
});
}
});
答案 3 :(得分:0)
我想我会根据machineghost的版本发布稍微更新的方法。这使用lodash invokeMap方法而不是下划线的调用。它支持与标准model.set方法相同的可选语法...例如('prop','val')或({prop:'val',prop:'val'})以及接受和传递选项对象。
var YourCollection = Backbone.Collection.extend({
setModels: function(key, val, options) {
var attrs;
if (typeof key === 'object') {
attrs = key;
options = val;
} else {
(attrs = {})[key] = val;
}
if (attrs) {
_.invokeMap(this, 'set', attrs, options);
}
return this;
}
});
答案 4 :(得分:-3)
如果您正在使用调用根据下划线网站的语法应该是 _.invoke(list,methodName,* arguments)http://underscorejs.org/#invoke
所以machineghost提到的上述功能应该是
collection.invoke({'url': someURL},'set');
希望有所帮助:)