No estoy seguro de haber hecho algo mal, pero aquí está.
He creado un componente con algunas propiedades, y todas funcionan correctamente en el ámbito de su instancia de componente. Sin embargo, cuando agregué una propiedad con un valor de matriz, se comporta de manera inesperada: cuando un elemento se inserta en la matriz de un componente a través de @set , se inserta en la propiedad de cada componente.
Supongo que tienes algo como:
App.MyThingsComponent = Ember.Component.extend({
things: []
}):
Esto usará la misma instancia de la matriz para todos los componentes porque se evalúa cuando se define la clase, no cuando se crea una instancia.
Puede solucionar esto creando una instancia de la matriz cuando se inicializa el componente:
App.MyThingsComponent = Ember.Component.extend({
things: null,
setupThings: function(){
this.set("things", []);
}.on("init")
}):
Ahora obtendrá una nueva instancia de matriz para cada instancia de componente y las cosas deberían comportarse como espera.
hth
¡Muchas gracias! Entonces, ¿es este comportamiento previsto? ¿Por qué no funciona de esta manera con cadenas, por ejemplo?
@Geokoumpa esto se debe a la herencia prototípica de Javascript. Aquí hay una publicación de blog completa de @wycats que es útil para aprender sobre ese aspecto de Javascript.
http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/
Comentario más útil
Supongo que tienes algo como:
Esto usará la misma instancia de la matriz para todos los componentes porque se evalúa cuando se define la clase, no cuando se crea una instancia.
Puede solucionar esto creando una instancia de la matriz cuando se inicializa el componente:
Ahora obtendrá una nueva instancia de matriz para cada instancia de componente y las cosas deberían comportarse como espera.
hth