¿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 .