如何更新集合中的所有模型 - Backbone.js

Nat*_*han 0 javascript backbone.js

我正在设置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'));
},
Run Code Online (Sandbox Code Playgroud)

这是我在控制台上看到的输出:

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]
Run Code Online (Sandbox Code Playgroud)

//编辑这是我希望看到的控制台输出:

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]
Run Code Online (Sandbox Code Playgroud)

//编辑我将显示模型代码以响应@ 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);
  },
});
Run Code Online (Sandbox Code Playgroud)

Sim*_*ias 5

只需使用该collection.each方法.

myCollection.each(function(model) {
 // do stuff
});
Run Code Online (Sandbox Code Playgroud)

Checkout Underscore.js方法由Backbone.Collection扩展:http://backbonejs.org/#Collection-Underscore-Methods