我想观察在 Ember
服务中创建的 Ember 对象内部的变化。
export default Ember.Service.extend({
internalCache: Ember.Object.create(),
setInternalCache: function setTestObj(itemId, relation, content) {
let arr, myarr, ref, internalCache;
internalCache = this.get('internalCache');
if (!((ref = internalCache[itemId]) != null ? ref[relation] : void 0)) {
internalCache[itemId] || (internalCache[itemId] = {});
internalCache[itemId][relation] = [];
}
arr = Ember.copy((internalCache[itemId][relation]), false);
content.map(function (elem) {
return arr.pushObject(elem);
});
myarr = internalCache[itemId][relation];
myarr.replace(0, arr.length, Ember.copy(arr, false));
}});
可以观察到 internalCache 对象属性,但此对象最终将用一个内部对象填充,该对象具有多个属性作为数组。我想观察在这些数组上添加/删除元素时的变化。说一个结构,比如:
internalCache: {
"identifier12": {
attachments: [1, 2],
children: [ ... ]
}
}
附件数组属性是使用 setInternalCache 函数设置的,它成功地修改了 internalCache 的 identifier12 属性内的附件数组属性。
到目前为止我尝试过:
cache: Ember.inject.service('cache');
itemAttachmentsObserver: Ember.observer('cache.internalCache.identifier12', function() {
console.log('foo');
}).on('init')
要查看嵌套的修改道具是否会触发观察者,什么都没有。
itemAttachmentsObserver: Ember.observer('cache.internalCache.identifier12.@each', function() {
console.log('bar');
}).on('init')
和
itemAttachmentsObserver: Ember.observer('cache.internalCache.identifier12.@each.attachments.[]', function() {
console.log('baz')
}).on('init')
但是当附件数组被修改时,我无法使观察者触发。
我刚刚测试了一些东西,它似乎可以工作,以防万一 somone 偶然发现同样的问题:
itemAttachmentsObserver: Ember.observer('cache.internalCache.identifier12.attachments.@each', function () {
var cache = this.get('cache');
}).on('init'),
在这种情况下,它会触发。