I found something strange in Backbone using change events. This is with a Model that has an Array property. And if I get the property, pull the new value inside and return it to the model, the change event will not be fired ...
Here is a fully documented example:
var TestModel = Backbone.Model.extend({ defaults : { numbers : [] }, initialize : function() { this.on('change:numbers', this.changedEvent); }, changedEvent : function() { console.log('model has changed'); } }); var oTestModel = new TestModel(); oTestModel.set('numbers', [2, 3, 4]); // change:numbers Event is fired var aNumbers = oTestModel.get('numbers'); aNumbers.push(5); oTestModel.set('numbers', aNumbers); // change:numbers event is NOT fired BUT WHY??? // oTestModel.set('numbers', [2, 3, 4]); // If this line is not commented out change:numbers event is also fired console.log(oTestModel.toJSON()); // Dumps out [2,3,4,5] Respective [2,3,4] if line above is not commented out
thanks in advance.
Bernhard
source share