2016-05-20 4 views
0

Я хочу наблюдать изменения внутри объекта Ember, созданного внутри Ember Service.Наблюдать за изменениями в внутреннем массиве Ember Object

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)); 
    }}); 

The internalCache свойств объекта можно наблюдать, но этот объект будет в конечном итоге будет заполнен внутренним объект с несколькими свойствами, чтобы быть массивами. Я хочу наблюдать изменения, когда элементы добавляются/удаляются на этих массивах. Скажем, структура, как:

internalCache: { 
    "identifier12": { 
    attachments: [1, 2], 
    children: [ ... ] 
    } 
} 

вложение свойства массива устанавливается с помощью setInternalCache функции и успешно модифицирует вложения свойства массива внутри свойства identifier12 из internalCache.

То, что я пытался до сих пор:

cache: Ember.inject.service('cache'); 

itemAttachmentsObserver: Ember.observer('cache.internalCache.identifier12', function() { 
    console.log('foo'); 
}).on('init') 

Чтобы увидеть, если вложенные модифицированные реквизита не вызовет наблюдателя, ничего.

itemAttachmentsObserver: Ember.observer('[email protected]', function() { 
    console.log('bar'); 
}).on('init') 

и

itemAttachmentsObserver: Ember.observer('[email protected][]', function() { 
    console.log('baz') 
}).on('init') 

Но я не могу сделать триггер наблюдателя при вложения массива изменяется.

ответ

0

Я просто проверял что-то, чтобы играть вокруг, и это, кажется, работает, только в том случае Сомон натыкается на одной и той же проблемой:

itemAttachmentsObserver: Ember.observer('[email protected]', function() { 
     var cache = this.get('cache'); 
    }).on('init'), 

И это срабатывает в данном случае.