Backbone.js:当使用集合获取时,本机将属性传递给模型
假设您正在定义一个Backbone.js模型。从我们的文档中Backbone.js:当使用集合获取时,本机将属性传递给模型,backbone.js,Backbone.js,假设您正在定义一个Backbone.js模型。从我们的文档中 new Model([attributes], [options]) 这对于将一些默认属性传递给模型来说似乎很好。传递后,模型将自动继承这些属性及其各自的值。无事可做。太棒了 另一方面,假设我们有一个模型的集合 new Backbone.Collection([models], [options]) 好的,酷,我们可以传递一些初始模型和一些选项。但是,我没有初始模型,也没有需要通过的选项,所以让我们继续。我要从服务器上取模型 c
new Model([attributes], [options])
这对于将一些默认属性传递给模型来说似乎很好。传递后,模型将自动继承这些属性及其各自的值。无事可做。太棒了
另一方面,假设我们有一个模型的集合
new Backbone.Collection([models], [options])
好的,酷,我们可以传递一些初始模型和一些选项。但是,我没有初始模型,也没有需要通过的选项,所以让我们继续。我要从服务器上取模型
collection.fetch([options])
我没有任何选项,但我想传递一些属性,以便在获取每个模型时添加到模型中。我可以通过将它们作为选项传递,然后将它们添加到模型初始化中的属性散列中来实现这一点,但这看起来很混乱
是他们的主干.js本机方法吗?您可以将属性作为选项传递给
获取
,并覆盖集合的解析
方法,以扩展响应上传递的选项(属性)
解决方案如下所示:
var Collection = Backbone.Collection.extend({
url:'someUrl',
parse:function(resp,options) {
if (options.attributesToAdd) {
for (var i=0;i<resp.length;i++)
_.extend(resp[i],options.attributesToAdd);
}
return resp;
}
});
您可能需要稍微调整代码以使用
JSON
结构,但希望这能让您从正确的方向开始。您可以将属性作为选项传递给fetch
,并在集合中使用parse
方法来设置模型上传递的选项(属性)。退房。很好的回答和解释,非常感谢!这是非常简单和直接的。但我很惊讶,我们不能只在主干集合上设置一个属性,然后将该属性传递给所有模型。
var collection = new Collection();
collection.fetch({
attributesToAdd:{foo:'bar',more:'foobar'}
});