2015-09-16 3 views
0

Просто начинайте с 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 истину событие изменения не срабатывает, даже если свойство добавляется к координатам объекта внутри массива.

Любые идеи?

+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()

Таким образом, вы могли бы Juste Используйте

ship.set({ hit:true }); 

и определить другое слушателя для события удара.

+0

Привет, Франсуа. Я думаю, что он запустит событие изменения, но он также будет писать весь массив, а не просто обновлять свойство. – David

+0

Просто btw, стандартный способ использования set теперь - с объектами, парами ключ-значение типа, ship.set ({координат: [targetHitCoordinates]}); – slinhart

Смежные вопросы