Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 DS上的ArrayObserver出现意外行为。存在多个关系_Ember.js_Ember Data - Fatal编程技术网

Ember.js DS上的ArrayObserver出现意外行为。存在多个关系

Ember.js DS上的ArrayObserver出现意外行为。存在多个关系,ember.js,ember-data,Ember.js,Ember Data,我试图使用DS.hasMany.addArrayObserver来监视在客户端创建新元素或从服务器加载新元素时插入的时间 但是,传递给arrayWillChange和arrayDidChange回调的参数显示,在观察对普通Ember.a的更改与DS.hasMany的更改之间存在不一致的行为 对于Ember.A数组,会传递正确的addCount和removeCount,但对于DS.hasMany,removeCount始终等于数组的旧长度,addCount始终等于数组的新长度 换句话说,DS.ha

我试图使用DS.hasMany.addArrayObserver来监视在客户端创建新元素或从服务器加载新元素时插入的时间

但是,传递给arrayWillChange和arrayDidChange回调的参数显示,在观察对普通Ember.a的更改与DS.hasMany的更改之间存在不一致的行为

对于Ember.A数组,会传递正确的addCount和removeCount,但对于DS.hasMany,removeCount始终等于数组的旧长度,addCount始终等于数组的新长度

换句话说,DS.hasMany数组看起来是空的,并且每次都添加所有新记录。我有两个问题:

这是预期的行为吗? 如果是这样,监视DS.hasMany关系上刚刚添加/删除的元素的最佳方法是什么? 我已经设置了一个行为演示:

编辑:

我还打开了一个关于ember data github的问题:

编辑2:


这似乎是预期的行为。余烬数据通过过滤掉已删除的项目并合并新项目来生成一个新数组。这是顺其自然的:

我用一种有点不直观的方式解决了我的问题。我没有直接将ArrayObserver添加到模型的HasMany关系中,而是使用DS.Store.filter获取相关记录,并使用addArrayObserver获取结果

相关代码:

var collection = this.store.filter('child', function(record){ return record.get('parent.id') === "1"; });
collection.then(function(records){
    records.addArrayObserver({
          arrayWillChange: function(obj, start, removeCount, addCount) {
            console.log("Filter", start, removeCount, addCount);
          },
          arrayDidChange: Ember.K
        });     
});