[英]Observe changes in internal array Ember Object
我想觀察在Ember Service中創建的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'),
在這種情況下會觸發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.