【发布时间】:2013-05-06 17:41:55
【问题描述】:
我正在设置集合中所有模型的value 属性(在_.each 循环中)。循环结束后,每个value 属性不变。我相信这是因为_.each 循环正在为每个模型创建一个新的实例变量。是否有标准方法来更新我不关注的集合模型?
强制骰子成顺子 (1,2,3,4,5,6) 的代码。 rollableDice 指的是具有 value 属性的 Backbone 模型的 Backbone 集合。这是一个容器模型上的方法:
makeStraight: function() {
console.log('making straight');
console.log(_(this.rollableDice.models).pluck('value'));
var counter = 1;
_(this.rollableDice.models).each(function(die) {
console.log(die.get('value'));
die.set('value', counter);
console.log(die.get('value'));
counter++;
});
console.log(_(this.rollableDice.models).pluck('value'));
},
这是我在控制台上看到的输出:
making straight
[1, 1, 3, 5, 2, 1]
undefined
1
undefined
2
undefined
3
undefined
4
undefined
5
undefined
6
[1, 1, 3, 5, 2, 1]
//编辑 这是我希望看到的控制台输出:
making straight
[1, 1, 3, 5, 2, 1]
1
1
1
2
3
3
5
4
2
5
1
6
[1, 2, 3, 4, 5, 6]
//编辑我将显示模型代码以响应@numbers1311407 的响应。我不应该使用模型方法来存储和访问属性。相反,即使在模型内部,我也应该使用 get/set 方法或默认方法 (http://backbonejs.org/#Model-defaults)。 这是不应该做的事情:
var Die = Backbone.Model.extend({
initialize: function() {
_.bindAll(this, 'roll')
},
value: 1,
roll: function() {
this.value = _.random(1,6);
},
});
【问题讨论】:
-
等等,你是用上面的型号代码和上面的
makeStraight方法吗?我问是因为Die.value与Die.attributes.value不同。后者是您调用die.set('value',1)时发生的变化。 -
是的,我就是这么做的。 @numbers1311407 下面的回复说明了这一点。现在我正在适当地使用模型属性。