From f3d0a85211213a1d0a94ca272cce1eec35d2edeb Mon Sep 17 00:00:00 2001 From: Kris Selden Date: Mon, 5 Dec 2016 18:03:11 -0800 Subject: [PATCH] fix test, fix typo in test. --- packages/ember-metal/lib/alias.js | 37 ++++++++++--------- .../ember-metal/tests/watching/watch_test.js | 3 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/ember-metal/lib/alias.js b/packages/ember-metal/lib/alias.js index 567d874afc8..069607b5628 100644 --- a/packages/ember-metal/lib/alias.js +++ b/packages/ember-metal/lib/alias.js @@ -28,33 +28,36 @@ AliasedProperty.prototype = Object.create(Descriptor.prototype); AliasedProperty.prototype.setup = function(obj, keyName) { assert(`Setting alias '${keyName}' on self`, this.altKey !== keyName); - let meta = metaFor(obj); - if (meta.peekWatching(keyName)) { - addDependentKeys(this, obj, keyName, meta); + let m = metaFor(obj); + if (m.peekWatching(keyName)) { + addDependentKeys(this, obj, keyName, m); } }; -AliasedProperty.prototype._addDependentKeyIfMissing = function(obj, keyName) { - let meta = metaFor(obj); - if (!meta.peekDeps(this.altKey, keyName)) { - addDependentKeys(this, obj, keyName, meta); +AliasedProperty.prototype.teardown = function(obj, keyName) { + let m = metaFor(obj); + if (m.peekWatching(keyName)) { + removeDependentKeys(this, obj, keyName, m); } }; -AliasedProperty.prototype._removeDependentKeyIfAdded = function(obj, keyName) { - let meta = metaFor(obj); - if (meta.peekDeps(this.altKey, keyName)) { - removeDependentKeys(this, obj, keyName, meta); - } +AliasedProperty.prototype.willWatch = function(obj, keyName) { + addDependentKeys(this, obj, keyName, metaFor(obj)); }; -AliasedProperty.prototype.willWatch = AliasedProperty.prototype._addDependentKeyIfMissing; -AliasedProperty.prototype.didUnwatch = AliasedProperty.prototype._removeDependentKeyIfAdded; -AliasedProperty.prototype.teardown = AliasedProperty.prototype._removeDependentKeyIfAdded; +AliasedProperty.prototype.didUnwatch = function(obj, keyName) { + removeDependentKeys(this, obj, keyName, metaFor(obj)); +}; -AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) { - this._addDependentKeyIfMissing(obj, keyName); +const CONSUMED = {}; +AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) { + let meta = metaFor(obj); + let cache = meta.writableCache(); + if (cache[keyName] !== CONSUMED) { + cache[keyName] = CONSUMED; + addDependentKeys(this, obj, keyName, meta); + } return get(obj, this.altKey); }; diff --git a/packages/ember-metal/tests/watching/watch_test.js b/packages/ember-metal/tests/watching/watch_test.js index c66a9046056..7eeae2e718a 100644 --- a/packages/ember-metal/tests/watching/watch_test.js +++ b/packages/ember-metal/tests/watching/watch_test.js @@ -277,13 +277,12 @@ testBoth('PROPERTY_DID_CHANGE + alias + cp', function(get, set) { } })); - ok(!isWatching(obj, 'child.cost'), 'precond alias target `child.cost` is not watched'); equal(get(obj, 'cost'), undefined); // this is how PROPERTY_DID_CHANGE will get notified ok(isWatching(obj, 'child.cost'), 'alias target `child.cost` is watched after consumption'); - ok(!isWatching(obj, 'child.tax'), 'precond alias target `child.cost` is not watched'); + ok(!isWatching(obj, 'child.tax'), 'precond alias target `child.tax` is not watched'); equal(get(obj, 'tax'), undefined); // this is how PROPERTY_DID_CHANGE will get notified ok(isWatching(obj, 'child.tax'), 'alias target `child.cost` is watched after consumption');