¿Es posible observar matrices dentro de las matrices usando @each?
-
28-10-2019 - |
Pregunta
Tengo un controlador que contiene una variedad de "cosas". Dentro de cada una de estas cosas hay una variedad de "subtensiones". Me gustaría crear una propiedad calculada que contenga todas las sujetos en todas las cosas (una variedad aplanada de subtensiones).
Mi propiedad calculada depende de things.@each.subthings.length
. Encuentro que si yo establecer la subthings
Propiedad de una cosa, mi propiedad calculada se actualiza. Sin embargo, si llamo pushObjects
Para agregar nuevos datos a mi existente subthings
Array, mi propiedad calculada no se actualiza.
He creado un jsfiddle demostrar. El código es el siguiente:
App = Em.Application.create({});
App.controller = Em.Object.create({
things: [
Em.Object.create({subthings:[]}),
Em.Object.create({subthings:[]}),
Em.Object.create({subthings:[]})
],
allSubThings : function() {
var things = this.get('things');
var results = [];
things.forEach( function(thing) {
results.pushObjects( thing.get('subthings') );
});
return results;
}.property('things.@each.subthings.length').cacheable()
});
setTimeout(function() {
var things = App.controller.get('things');
// This works:
things.objectAt(0).set('subthings',[1,2,3]);
}, 1000);
setTimeout(function() {
var things = App.controller.get('things');
// This does not:
things.objectAt(1).get('subthings').pushObjects([1,2,3]);
}, 2000);
¡Gracias!
Solución
Agrega otro @each
a la lista de propiedades .property('things.@each.subthings.@each.length')