Ho trovato qualcosa di strano in Backbone utilizzando gli eventi di modifica. È con un modello che ha una proprietà Array. E se ho la proprietà spingere un nuovo valore all'interno e riportarlo al modello l'evento di modifica non viene licenziato ...Modifica della proprietà dell'array del modello Backbone e modifica del listener di eventi non sempre attivando
Ecco un esempio completamente documentato:
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
Thx in anticipo.
Grazie che mi ha aiutato – Bernhard
Potrebbe esserci un notevole calo di prestazioni usando '_.clone (..)' su un oggetto di grandi dimensioni? – Matthew
Sì, dal momento che stai aggiungendo codice personalizzato per risolvere il problema, aggiungi il codice che attiva l'evento: 'oTestModel.trigger ('cambia: numeri', oTestModel, aNumbers)' – Okneloper