ember.js

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