2015-09-16 51 views
0

刚开始时使用Backbone,如果这是一个基本问题,那么很抱歉。使用一组对象作为Backbone模型中的属性

我有一个模型,它有一个对象数组作为属性,像这样。

var Ship = Backbone.Model.extend({ 
    defaults: { 
     coordinates: [] 
    }, 
    initialize: function() { 
     this.on('change:coordinates', this.onChange); 
    }, 
    onChange: function() { 
     console.log('CHANGED!!'); 
    }, 
}); 

var ship = new Ship(); 

ship.set('coordinates', [{xAxis:1, yAxis:1}, {xAxis:1, yAxis:2}]); 

var targetHitCoordinates = _.findWhere(ship.get('coordinates'), {xAxis:1, yAxis:1}); 

targetHitCoordinates.isHit = true; 

console.log(ship); 

当我将isHit设置为true时,即使将属性添加到数组中的坐标对象,也不会触发更改事件。

任何想法?

+0

是否触发了第一个坐标.set? –

+0

是的,但当isHit被改变时没有 – David

回答

0

我想这是因为你没有使用.set方法。

类似的东西应该工作:

var targetHitCoordinates = _.findWhere(ship.get('coordinates'), {xAxis:1, yAxis:1}); 

targetHitCoordinates.isHit = true; 

ship.set('coordinates', [targetHitCoordinates]); 

让我知道,如果它

我不知道,了解你,你的管理模型属性的方式,但无论如何,你需要使用.SET ()

所以,你可以使用探微

ship.set({ hit:true }); 

和定义另一个听众的热门事件。

+0

嗨弗朗索瓦。我认为这将触发更改事件,但它也会覆盖整个数组,而不仅仅是更新属性。 – David

+0

只是顺便说一句,现在使用的标准方法是使用对象,键值对,如ship.set({coordinates:[targetHitCoordinates]}); – slinhart

相关问题