我想构建一个Ember.Component,可以在块形式中使用,或者在需要某些默认行为时不使用块。
例如,以块形式:
{{#my-helper}}
...
{{/my-helper}}
或非阻止形式:
{{my-helper}}
辅助模板在某种程度上能够检测到没有块并且相应地表现。例如,如果有某种方法来检测块,那就太好了:
{{#if hasBlock}}
{{yield}}
{{else}}
default output
{{/if}}
根据我的要求,我需要有一些方法只有在没有块的情况下输出内容。
任何想法如何做到这一点?
如果你对为什么我的问题与接受的答案一致感到困惑,那是因为Ember碰巧采用了我原本想象的新语法。当我第一次提出这个问题时,原来是使用{{#if template}}
进行了无记录的方法,但是后来Ember 2.x已经弃用了这个问题,并且新的语法{{#if hasBlock}}
恰好符合我的措辞我的问题。
答案 0 :(得分:31)
在Component
内,您需要检查hasBlock
{{#if hasBlock}}
{{yield}}
{{else}}
<p>Default content for inline (non-block) form of the component.</p>
{{/if}}
这是一个JSBin:http://jsbin.com/IWEKere/1/edit
答案 1 :(得分:2)
指向文档的链接位于:http://emberjs.com/api/classes/Ember.Component.html#property_template
文档没有明确说明以这种方式使用模板属性。由于Ember.Component
类继承自Ember.View
类,因此可以推断组件模板的作用类似于Ember.View
布局模板。
答案 2 :(得分:1)
&#34;模板&#34;已被弃用,有利于部分,例如。
{{#if partial}}
{{yield}}
{{else}}
<p>Default content for inline (non-block) form of the component.</p>
{{/if}}
答案 3 :(得分:1)
目前不推荐直接访问template
,但在这种情况下应该使用功能标记为hasBlock
的属性(基本上是!!template
)。
功能标志为ember-views-component-block-info
以下是合并拉取请求的链接:https://github.com/emberjs/ember.js/pull/10461