簡體   English   中英

觀察內部數組Ember Object中的更改

[英]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函數設置的,它成功修改了internalCacheidentifier12屬性內的附件數組屬性。

到目前為止,我已經嘗試過:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM