function removeObserverForContentKey(content, keyName, proxy, idx, loc) { while (--loc >= idx) { let item = objectAt(content, loc); if (item) { _removeBeforeObserver(item, keyName, proxy, 'contentKeyWillChange'); removeObserver(item, keyName, proxy, 'contentKeyDidChange'); } } }
testBoth('should transition between watched and unwatched strategies', function(get, set) { let content = { foo: 'foo' }; let proxy = ObjectProxy.create({ content: content }); let count = 0; function observer() { count++; } equal(get(proxy, 'foo'), 'foo'); set(content, 'foo', 'bar'); equal(get(proxy, 'foo'), 'bar'); set(proxy, 'foo', 'foo'); equal(get(content, 'foo'), 'foo'); equal(get(proxy, 'foo'), 'foo'); addObserver(proxy, 'foo', observer); equal(count, 0); equal(get(proxy, 'foo'), 'foo'); set(content, 'foo', 'bar'); equal(count, 1); equal(get(proxy, 'foo'), 'bar'); set(proxy, 'foo', 'foo'); equal(count, 2); equal(get(content, 'foo'), 'foo'); equal(get(proxy, 'foo'), 'foo'); removeObserver(proxy, 'foo', observer); set(content, 'foo', 'bar'); equal(get(proxy, 'foo'), 'bar'); set(proxy, 'foo', 'foo'); equal(get(content, 'foo'), 'foo'); equal(get(proxy, 'foo'), 'foo'); });
return function() { removeObserver(record, 'title', callback); };
m.setProxy(); m.setTag(new ProxyTag(this)); }, isTruthy: bool('content'), willWatchProperty(key) { let contentKey = `content.${key}`; _addBeforeObserver(this, contentKey, null, contentPropertyWillChange); addObserver(this, contentKey, null, contentPropertyDidChange); }, didUnwatchProperty(key) { let contentKey = `content.${key}`; _removeBeforeObserver(this, contentKey, null, contentPropertyWillChange); removeObserver(this, contentKey, null, contentPropertyDidChange); }, unknownProperty(key) { let content = get(this, 'content'); if (content) { deprecate( `You attempted to access \`${key}\` from \`${this}\`, but object proxying is deprecated. Please use \`model.${key}\` instead.`, !this.isController, { id: 'ember-runtime.controller-proxy', until: '3.0.0' } ); return get(content, key); } }, setUnknownProperty(key, value) {
activeObservers.forEach(args => removeObserver(...args));
addObserver(this, key, target, method); }, /** Remove an observer you have previously registered on this object. Pass the same key, target, and method you passed to `addObserver()` and your target will no longer receive notifications. @method removeObserver @param {String} key The key to observer @param {Object} target The target object to invoke @param {String|Function} method The method to invoke. @public */ removeObserver(key, target, method) { removeObserver(this, key, target, method); }, /** Returns `true` if the object currently has observers registered for a particular key. You can use this method to potentially defer performing an expensive action until someone begins observing a particular property on the object. @method hasObserverFor @param {String} key Key to check @return {Boolean} @private */ hasObserverFor(key) { return hasListeners(this, key + ':change');