yo estaba tratando de responder a esta pregunta: ¿emberjs: add routes after app initialize()Jugando con Ember.Object.reopen(), ¿por qué tengo esos resultados?
empecé a jugar con Ember.Object.reopen(), para entender cómo funciona, y tal vez encontrar una manera de responder a la pregunta anterior.
me siento un poco desconcertado, y no entiendo el comportamiento de este código:
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);
Si alguien puede explicar lo que está pasando, sobre todo por qué el las plantillas a veces no se actualizan, a veces se actualizan, y también cuál es la diferencia entre llamar al reopen
en una clase, invocarlo y en una instancia.
Todo tiene sentido. Muchas gracias, me has iluminado. Entonces, si lo entiendo bien, volver a abrir una instancia como lo hago aquí, tiene el mismo comportamiento que con 'App.get ('myObj'). Value = 'reopenOnInstance'' ¿verdad? Conocía el método getPath, y ahora con la última brasa, el get tiene el mismo comportamiento, puedes hacer 'obj.get ('otherObj.someProperty')'. –
Ver la edición. Esto significa que tiene razón, establecer el valor directamente será como volver a abrir en una instancia. Pero si tiene algo vinculante para ese valor (como la interfaz de usuario) Ember arrojará un error porque "set" no se usó (hizo un [violín] (http://jsfiddle.net/scispear/n5B5d/) para ver el error). – SciSpear
Gracias de nuevo por la edición :). Creo que ahora la respuesta está completa ya que no tengo más cosas para dilucidar. –