BackboneJS迭代复杂模型

时间:2014-06-27 09:59:14

标签: javascript jquery backbone.js

我有一个BackboneJS复合模型,它有2个属性;

"myAttr1": new MyObj1(model.myAttr1),
"myCollectionAttr": new MyObj2(model.myCollectionAttr)

MyObj2看起来像

"attr1" : new Base1( ),
"attr2" : new Base2( )

现在我想设置一个内层属性(即Base1的属性)......所以我迭代并说出来;

self.model.get("myCollectionAttr").each(function(model) {
    model.get("attr1").set('basemodel1attr','Y');
});

因此Base1和Base2模型具有basemodel1attr和basemodel2attr等属性

虽然model.get(" attr1")返回属性列表。我不能在它上面使用.set()。

在我的内部属性上设置的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

如果我理解正确你想要遍历你的集合的模型并设置该模型的一个特定属性

$.each(collection.models, function(i, model){
    model.set('item','new value');
}

答案 1 :(得分:0)

您混淆了访问权限。您可以像访问Collection一样访问MyObj2的属性。但是你说MyObj2是一个Model,而不是Collection。

self.model.get("myCollectionAttr").get("attr1").set("basemodel1attr", "Y");

除了您的属性和每个循环的命名之外,没有提示您真正在任何地方使用集合。所以不要。

如果MyObj2是Collection,则不应尝试向Collection中添加2个不同的Model:

window.SomeModel = Backbone.Model.extend({ "attr1": new Base1(), "attr2": new Base2() });
window.SomeColl = Backbone.Collection.extend({ model: SomeModel });