diff --git a/packages/ember-glimmer/lib/utils/references.js b/packages/ember-glimmer/lib/utils/references.js index fda919586ab..b4fcf2998a7 100644 --- a/packages/ember-glimmer/lib/utils/references.js +++ b/packages/ember-glimmer/lib/utils/references.js @@ -217,7 +217,7 @@ export class NestedPropertyReference extends PropertyReference { return parentValue.length; } - if (typeof parentValue === 'object' && parentValue) { + if ((typeof parentValue === 'object' || typeof parentValue === 'function') && parentValue) { if (MANDATORY_SETTER) { watchKey(parentValue, _propertyKey); } @@ -315,7 +315,7 @@ export class SimpleHelperReference extends CachedReference { let result = helper(positionalValue, namedValue); - if (typeof result === 'object' && result !== null) { + if (typeof result === 'object' && result !== null || typeof result === 'function') { return new RootReference(result); } else { return PrimitiveReference.create(result); @@ -396,7 +396,7 @@ export class InternalHelperReference extends CachedReference { // @implements PathReference export class UnboundReference extends ConstReference { static create(value) { - if (typeof value === 'object' && value !== null) { + if (typeof value === 'object' && value !== null || typeof result === 'function') { return new UnboundReference(value); } else { return PrimitiveReference.create(value); diff --git a/packages/ember-metal/lib/property_set.js b/packages/ember-metal/lib/property_set.js index e1d3a510674..716608b0df9 100644 --- a/packages/ember-metal/lib/property_set.js +++ b/packages/ember-metal/lib/property_set.js @@ -67,7 +67,6 @@ export function set(obj, keyName, value, tolerant) { propertyDidChange(obj, keyName, meta); } - return value; } diff --git a/packages/ember-metal/lib/tags.js b/packages/ember-metal/lib/tags.js index 5e265cd9ad4..31d82c77bc3 100644 --- a/packages/ember-metal/lib/tags.js +++ b/packages/ember-metal/lib/tags.js @@ -13,7 +13,7 @@ function makeTag() { } export function tagForProperty(object, propertyKey, _meta) { - if (typeof object !== 'object' || object === null) { return CONSTANT_TAG; } + if ((typeof object !== 'object' && typeof object !== 'function') || object === null) { return CONSTANT_TAG; } let meta = _meta || metaFor(object); if (meta.isProxy()) { diff --git a/packages/ember-metal/lib/watch_key.js b/packages/ember-metal/lib/watch_key.js index 36304f07cd8..d0fc69f7692 100644 --- a/packages/ember-metal/lib/watch_key.js +++ b/packages/ember-metal/lib/watch_key.js @@ -14,7 +14,7 @@ import { let handleMandatorySetter; export function watchKey(obj, keyName, meta) { - if (typeof obj !== 'object' || obj === null) { return; } + if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) { return; } let m = meta || metaFor(obj); let count = m.peekWatching(keyName) || 0; @@ -81,9 +81,8 @@ if (MANDATORY_SETTER) { } export function unwatchKey(obj, keyName, _meta) { - if (typeof obj !== 'object' || obj === null) { - return; - } + if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) { return; } + let meta = _meta || peekMeta(obj); // do nothing of this object has already been destroyed diff --git a/packages/ember-metal/lib/watch_path.js b/packages/ember-metal/lib/watch_path.js index 988a716c914..83cb6abbb60 100644 --- a/packages/ember-metal/lib/watch_path.js +++ b/packages/ember-metal/lib/watch_path.js @@ -10,7 +10,7 @@ export function makeChainNode(obj) { } export function watchPath(obj, keyPath, meta) { - if (typeof obj !== 'object' || obj === null) { return; } + if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) { return; } let m = meta || metaFor(obj); let counter = m.peekWatching(keyPath) || 0; @@ -21,7 +21,7 @@ export function watchPath(obj, keyPath, meta) { } export function unwatchPath(obj, keyPath, meta) { - if (typeof obj !== 'object' || obj === null) { return; } + if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) { return; } let m = meta || peekMeta(obj); if (m === undefined) { return; } let counter = m.peekWatching(keyPath) || 0; diff --git a/packages/ember-metal/lib/watching.js b/packages/ember-metal/lib/watching.js index 2ea610b6f24..d18b69837a1 100644 --- a/packages/ember-metal/lib/watching.js +++ b/packages/ember-metal/lib/watching.js @@ -40,7 +40,7 @@ export function watch(obj, _keyPath, m) { } export function isWatching(obj, key) { - if (typeof obj !== 'object' || obj === null) { + if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) { return false; } let meta = peekMeta(obj);