¿Cuál es la diferencia entre la propiedad ''[]'' y la propiedad ''@each'' en ember.js?
(1)
Me he dado cuenta de que la mezcla enumerable tiene propiedades calculadas que dependen de la propiedad ''[]'' , mientras que las matrices de ''@each'' también tienen la propiedad ''@each'' .
¿Cuál es la diferencia entre depender de ''[]'' y ''@each'' ?
Mi comprensión vaga (corríjanme si me equivoco) es que ''[]'' se activa cuando se reemplaza el contenido de la matriz. ¿Pero esto es diferente de depender de la propiedad en sí?
Considera la siguiente clase:
C = Ember.Object.extend({
things: null,
watcher1: (function() {
console.log(''watcher1'')
}).observes(''things.[]''),
watcher2: (function() {
console.log(''watcher2'')
}).observes(''things.@each'')
});
Y creo una instancia de la siguiente manera:
c = C.create({things: Ember.A([''a'', ''b''])});
El seguimiento:
c.get(''things'').replace(0, 1, [''z''])
activa watcher1 y watcher2
Y lo siguiente:
c.get(''things'').setObjects([''1'', ''2''])
también desencadena watcher1 y watcher2
Al igual que:
c.get(''things'').addObject(''v'')
Entonces, ¿hay alguna diferencia? ¿Cuándo deberíamos usar uno frente al otro?
¡Gracias! Kevin
Use @each si necesita observar las propiedades de los elementos de la matriz
@each admite la observación de las propiedades de los elementos dentro de la matriz. Por ejemplo, [email protected] . La notación de corchetes no es compatible con esto. Aquí hay una demo de jsbin .
@each es una propiedad de instancias de Array que devuelve una instancia de EachProxy que maneja la delegación. Por otro lado, [] simplemente devuelve this .
Utilice [] si lo necesita para trabajar en enumerables que no pertenecen a Array.
De acuerdo con el registro de cambios de las brasas, la notación del corchete se dejó sin efecto a favor de @each en la @each 0.9.4 , pero luego volvió a habilitarse en 0.9.8 . La confirmación que lo vuelve a habilitar indica que [] se puede usar para enumerables que no son de Array, como Ember.Set instancias de Ember.Set . jsbin demo .