有没有办法判断 yielded 组件的 has-block 是否为空?
Is there a way to tell if a yielded component's has-block is empty?
我正在尝试制作一个上下文组件,当一个组件未在 yielded 块中传递时,它可以提供默认值 header。通常,我可以使用 has-block 助手来判断组件是否具有块内容,但该组件将始终具有块内容。我认为我需要的是一种判断生成的组件是否具有块内容的方法。例如:
{{! panel.hbs }}
<header>
{{yield header=(component "blank-template")}}
{{#if (yieldedHeaderEmpty)}}
<h1>My Default Header</h1>
{{/if}}
</header>
<section>
{{yield body=(component "blank-template")}}
</section>
<footer>
{{yield footer=(component "blank-template")}}
</footer>
我只想在生成的“header”部分为空时显示默认 header。我可以创建一个 header 组件,然后可以像这样使用 has-block:
{{! panel.hbs }}
<header>
{{yield header=(component "my-header")}}
</header>
...
{{! MyHeader.hbs}}
{{#if (has-block)}}
{{yield}}
{{else}}
<h1>My Default</h1>
{{/if}}
从功能上讲,我认为这会起作用,但“my-header”组件的唯一目的是用于此“面板”组件,这似乎很浪费。开放的想法。谢谢!
Ember 核心最近接受了专门为此目的设计的“命名块”的 RFC。 https://github.com/emberjs/rfcs/pull/460。有了这个特性,我们可以命名可产出块并使用它们的名称访问它们,例如:
template.hbs:
<Panel>
<:header>This is a customized header</:header>
</Panel>
panel.hbs:
{{#if (has-block "header")}}
{{yield to="header"}}
{{else}}
<header> This is the default header </header>
{{/if}}
这尚未登陆 Ember 核心。幸运的是,我们有一个官方的 polyfill 支持来自 3.12.4
的这个特性:https://github.com/ember-polyfills/ember-named-blocks-polyfill
我正在尝试制作一个上下文组件,当一个组件未在 yielded 块中传递时,它可以提供默认值 header。通常,我可以使用 has-block 助手来判断组件是否具有块内容,但该组件将始终具有块内容。我认为我需要的是一种判断生成的组件是否具有块内容的方法。例如:
{{! panel.hbs }}
<header>
{{yield header=(component "blank-template")}}
{{#if (yieldedHeaderEmpty)}}
<h1>My Default Header</h1>
{{/if}}
</header>
<section>
{{yield body=(component "blank-template")}}
</section>
<footer>
{{yield footer=(component "blank-template")}}
</footer>
我只想在生成的“header”部分为空时显示默认 header。我可以创建一个 header 组件,然后可以像这样使用 has-block:
{{! panel.hbs }}
<header>
{{yield header=(component "my-header")}}
</header>
...
{{! MyHeader.hbs}}
{{#if (has-block)}}
{{yield}}
{{else}}
<h1>My Default</h1>
{{/if}}
从功能上讲,我认为这会起作用,但“my-header”组件的唯一目的是用于此“面板”组件,这似乎很浪费。开放的想法。谢谢!
Ember 核心最近接受了专门为此目的设计的“命名块”的 RFC。 https://github.com/emberjs/rfcs/pull/460。有了这个特性,我们可以命名可产出块并使用它们的名称访问它们,例如:
template.hbs:
<Panel>
<:header>This is a customized header</:header>
</Panel>
panel.hbs:
{{#if (has-block "header")}}
{{yield to="header"}}
{{else}}
<header> This is the default header </header>
{{/if}}
这尚未登陆 Ember 核心。幸运的是,我们有一个官方的 polyfill 支持来自 3.12.4
的这个特性:https://github.com/ember-polyfills/ember-named-blocks-polyfill