stavo cercando di rispondere a questa domanda: emberjs: add routes after app initialize()Giocare con Ember.Object.reopen(), perché ho quei risultati?
ho iniziato a giocare con Ember.Object.reopen(), per capire come funziona, e forse trovare un modo di rispondere alla domanda precedente.
mi sento un po 'perplesso, e non capisco il comportamento di questo codice:
jsfiddle: http://jsfiddle.net/Sly7/FpJwT/
<script type="text/x-handlebars">
<div>{{App.myObj.value}}</div>
<div>{{App.myObj2.value}}</div>
<div>{{App.myObj3.value}}</div>
</script>
App = Em.Application.create({});
App.MyObject = Em.Object.extend({value: 'initial'});
App.set('myObj', App.MyObject.create());
Em.run.later(function(){
App.get('myObj').reopen({
value: "reopenOnInstance"
}); // the template is not updated, 'initial' is still diplayed, but
console.log(App.get('myObj').get('value')); // print 'reopenOnInstance'
App.MyObject.reopen({
value: "reopenOnClass"
});
App.set('myObj2',App.MyObject.create()); // the template is updated and
console.log(App.get('myObj2').get('value')); //print 'reopenOnClass'
App.myObj3 = App.MyObject.create(); // the template is not updated but
console.log(App.myObj3.get('value')); // print 'reopenOnClass'
Em.run.later(function(){
App.get('myObj').set('value', "setWithSetter"); // the template is updated and
console.log(App.get('myObj').get('value')); // print 'setWithSetter'
App.get('myObj2').set('value', "setWithSetter"); // the template is updated and
console.log(App.get('myObj2').get('value')); // print 'setWithSetter'
App.myObj3.set('value', "setWithSetter"); // the template is not updated but
console.log(App.myObj3.get('value')); // print 'setWithSetter'
}, 2000);
},2000);
Se qualcuno può spiegare che cosa sta succedendo, soprattutto perché il i modelli a volte non sono aggiornati, a volte aggiornati, e anche qual è la differenza tra chiamare reopen
su una classe, chiamandolo e su un'istanza.
Tutto ha senso. Grazie mille mi hai illuminato. Quindi, se capisco bene, riaprire un'istanza come faccio qui, ha lo stesso comportamento di "App.get ('myObj'). Value = 'reopenOnInstance'' giusto? Ero a conoscenza di getPath, metodo, e ora con l'ultimo ember, il comando get ha lo stesso comportamento, si può fare 'obj.get ('otherObj.someProperty')'. –
Vedi modifica. Ciò significa che sei corretto, l'impostazione diretta del valore sarà proprio come la riapertura di un'istanza. Ma se hai qualcosa che si lega a quel valore (come l'interfaccia utente) Ember genererà un errore perché "set" non è stato usato (fatto un [violinista] (http://jsfiddle.net/scispear/n5B5d/) per vedere il errore). – SciSpear
Grazie ancora per la modifica :). Penso che ora la risposta sia completa in quanto non ho più nulla da chiarire. –