diff --git a/package.json b/package.json index 96605a0d9a9..56fab353b1c 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "express": "^4.5.0", "finalhandler": "^0.4.0", "github": "^0.2.3", - "glimmer-engine": "tildeio/glimmer#13556d2", + "glimmer-engine": "tildeio/glimmer#1df4b45", "glob": "^5.0.13", "htmlbars": "0.14.24", "mocha": "^2.4.5", diff --git a/packages/ember-glimmer/lib/environment.js b/packages/ember-glimmer/lib/environment.js index 321417be5d3..c8f628781e5 100644 --- a/packages/ember-glimmer/lib/environment.js +++ b/packages/ember-glimmer/lib/environment.js @@ -322,11 +322,11 @@ export default class Environment extends GlimmerEnvironment { this.owner.lookup(`helper:${name}`); // TODO: try to unify this into a consistent protocol to avoid wasteful closure allocations if (helper.isInternalHelper) { - return (args) => helper.toReference(args); + return (vm, args) => helper.toReference(args); } else if (helper.isHelperInstance) { - return (args) => SimpleHelperReference.create(helper.compute, args); + return (vm, args) => SimpleHelperReference.create(helper.compute, args); } else if (helper.isHelperFactory) { - return (args) => ClassBasedHelperReference.create(helper, args); + return (vm, args) => ClassBasedHelperReference.create(helper, vm, args); } else { throw new Error(`${name} is not a helper`); } diff --git a/packages/ember-glimmer/lib/utils/references.js b/packages/ember-glimmer/lib/utils/references.js index 647537a87e9..0ff852bb08f 100644 --- a/packages/ember-glimmer/lib/utils/references.js +++ b/packages/ember-glimmer/lib/utils/references.js @@ -221,8 +221,10 @@ export class SimpleHelperReference extends CachedReference { } export class ClassBasedHelperReference extends CachedReference { - static create(helperClass, args) { - return new ClassBasedHelperReference(helperClass.create(), args); + static create(helperClass, vm, args) { + let instance = helperClass.create(); + vm.newDestroyable(instance); + return new ClassBasedHelperReference(instance, args); } constructor(instance, args) { diff --git a/packages/ember-glimmer/tests/integration/helpers/custom-helper-test.js b/packages/ember-glimmer/tests/integration/helpers/custom-helper-test.js index 29284f83b8f..5d4aaaaef56 100644 --- a/packages/ember-glimmer/tests/integration/helpers/custom-helper-test.js +++ b/packages/ember-glimmer/tests/integration/helpers/custom-helper-test.js @@ -370,7 +370,7 @@ moduleFor('Helpers test: custom helpers', class extends RenderingTest { }, /Helpers may not be used in the element form/); } - ['@htmlbars class-based helper is torn down']() { + ['@test class-based helper is torn down']() { let destroyCalled = 0; this.registerHelper('some-helper', { @@ -486,7 +486,7 @@ moduleFor('Helpers test: custom helpers', class extends RenderingTest { this.assertText('Who overcomes by force hath overcome but half his foe'); } - ['@htmlbars class-based helper used in subexpression is destroyed']() { + ['@test class-based helper used in subexpression is destroyed']() { let destroyCount = 0; this.registerHelper('dynamic-segment', {