我正在尝试使用DS.hasMany.addArrayObserver
来监控何时插入新元素(创建客户端或从服务器加载)。
但是,传递给arrayWillChange
和arrayDidChange
回调的参数在观察对“普通”Ember.A
与DS.hasMany
关系的更改之间显示出不一致的行为。
对于Ember.A
数组,传递了正确的addCount
和removeCount
,但DS.hasMany
removeCount
总是等于旧addCount
数组和DS.hasMany
总是等于数组的新长度。
换句话说,看起来DS.hasMany
“数组”被清空,每次都添加所有新记录。我有两个问题:
filter
关系中添加/删除元素的最佳方法是什么?我已经设置了行为演示:DEMO
编辑:
我还在ember-data github上打开了一个问题:https://github.com/emberjs/data/issues/2981
编辑2:
这看起来像是预期的行为。 Ember-data通过concat
删除已删除的项目和flushCanonical
新项目生成新阵列。这发生在{{1}}:https://github.com/emberjs/data/blob/339b79aa3ea82e9be1a8f39db36ec1133d0b65a2/packages/ember-data/lib/system/many-array.js#L67
答案 0 :(得分:0)
我以一种非直观的方式解决了我的问题。我没有直接向模型的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
});
});