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!

¿Fue útil?

Solución

Agrega otro @each a la lista de propiedades .property('things.@each.subthings.@each.length')

http://jsfiddle.net/tomwhatmore/pdqet/3/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top