Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 是否可以使用@each在数组中观察数组?_Ember.js - Fatal编程技术网

Ember.js 是否可以使用@each在数组中观察数组?

Ember.js 是否可以使用@each在数组中观察数组?,ember.js,Ember.js,我有一个控制器,它包含一系列“东西”。在每一个事物中都有一系列的“子事物”。我想创建一个计算属性,它包含所有事物中的所有子元素(子元素的扁平数组) 我的计算属性取决于事物。@each.subthings.length。我发现,如果我设置事物的子事物属性,我的计算属性就会更新。但是,如果我调用pushObjects将新数据添加到我的现有子内容数组中,我的计算属性不会更新 我已经创建了一个演示。代码如下: App = Em.Application.create({}); App.controlle

我有一个控制器,它包含一系列“东西”。在每一个事物中都有一系列的“子事物”。我想创建一个计算属性,它包含所有事物中的所有子元素(子元素的扁平数组)

我的计算属性取决于
事物。@each.subthings.length
。我发现,如果我设置事物的
子事物属性,我的计算属性就会更新。但是,如果我调用
pushObjects
将新数据添加到我的现有
子内容
数组中,我的计算属性不会更新

我已经创建了一个演示。代码如下:

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);

谢谢

将另一个
@each
添加到属性列表
.property('things.@each.subthings.@each.length')


效果很好,谢谢!也许我不太明白@each在这里做什么。您的解决方案似乎在观察“subthings”数组中每个元素的长度属性,而不是subthings数组本身的长度。来自Ember docs:“请注意,@each只能在一个级别上运行。您不能使用像todos.@each.owner.name或todos.@each.owner.@each.name这样的嵌套表单