diff --git a/packages/ember-glimmer/tests/integration/components/closure-components-test.js b/packages/ember-glimmer/tests/integration/components/closure-components-test.js index 19fc232340e..69b1d6ead6b 100644 --- a/packages/ember-glimmer/tests/integration/components/closure-components-test.js +++ b/packages/ember-glimmer/tests/integration/components/closure-components-test.js @@ -619,6 +619,18 @@ moduleFor('@htmlbars Components test: closure components', class extends Renderi assert.equal(this.$('.value').text(), '8'); } + ['@test tagless blockless components render'](assert) { + this.registerComponent('my-comp', { + ComponentClass: Component.extend({ tagName: '' }) + }); + + this.render(`{{my-comp}}`); + + this.runTask(() => this.rerender()); + + assert.equal(this.$().text(), ''); + } + }); class ClosureComponentMutableParamsTest extends RenderingTest { diff --git a/packages/ember-glimmer/tests/integration/components/local-lookup-test.js b/packages/ember-glimmer/tests/integration/components/local-lookup-test.js index a46399c2975..f95120aa5ed 100644 --- a/packages/ember-glimmer/tests/integration/components/local-lookup-test.js +++ b/packages/ember-glimmer/tests/integration/components/local-lookup-test.js @@ -1,4 +1,5 @@ import { moduleFor, RenderingTest } from '../../utils/test-case'; +import { Component } from '../../utils/helpers'; // copied from ember-htmlbars/tests/integration/local-lookup-test.js function buildResolver() { @@ -48,6 +49,22 @@ moduleFor('Components test: local lookup', class extends RenderingTest { this.assertText('Nested template says: Hi!', 'Re-render works'); } + ['@htmlbars tagless blockless component can lookup local template'](assert) { + this.registerComponent('x-outer/x-inner', { template: 'Nested template says: {{yield}}' }); + this.registerTemplate('components/x-outer', '{{#x-inner}}Hi!{{/x-inner}}'); + this.registerComponent('x-outer', { + ComponentClass: Component.extend({ tagName: '' }) + }); + + this.render('{{x-outer}}'); + + this.assertText('Nested template says: Hi!', 'Re-render works'); + + this.runTask(() => this.rerender()); + + this.assertText('Nested template says: Hi!', 'Re-render works'); + } + ['@htmlbars it can lookup a local component template']() { this.registerTemplate('components/x-outer/x-inner', 'Nested template says: {{yield}}'); this.registerTemplate('components/x-outer', '{{#x-inner}}Hi!{{/x-inner}}'); diff --git a/packages/ember-htmlbars/lib/hooks/component.js b/packages/ember-htmlbars/lib/hooks/component.js index e8e3d3d97af..d5a7f8e8549 100644 --- a/packages/ember-htmlbars/lib/hooks/component.js +++ b/packages/ember-htmlbars/lib/hooks/component.js @@ -55,9 +55,15 @@ export default function componentHook(renderNode, env, scope, _tagName, params, // Determine if this is an initial render or a re-render. if (state.manager) { - let templateMeta = state.manager.block.template.meta; + let sm = state.manager; + let templateMeta = null; + if (sm.block) { + templateMeta = sm.block.template.meta; + } else if (sm.scope && sm.scope._view) { + templateMeta = sm.scope._view.template.meta; + } env.meta.moduleName = (templateMeta && templateMeta.moduleName) || (env.meta && env.meta.moduleName); - extractPositionalParams(renderNode, state.manager.component.constructor, params, attrs, false); + extractPositionalParams(renderNode, sm.component.constructor, params, attrs, false); state.manager.rerender(env, attrs, visitor); return; }