Ember.Component可以同时具有块和非块形式吗?

时间:2013-09-25 17:30:21

标签: ember.js handlebars.js

我想构建一个Ember.Component,可以在块形式中使用,或者在需要某些默认行为时不使用块。

例如,以块形式:

{{#my-helper}}
  ...
{{/my-helper}}

或非阻止形式:

{{my-helper}}

辅助模板在某种程度上能够检测到没有块并且相应地表现。例如,如果有某种方法来检测块,那就太好了:

{{#if hasBlock}}
  {{yield}}
{{else}}
  default output
{{/if}}

根据我的要求,我需要有一些方法只有在没有块的情况下输出内容。

任何想法如何做到这一点?

更新

如果你对为什么我的问题与接受的答案一致感到困惑,那是因为Ember碰巧采用了我原本想象的新语法。当我第一次提出这个问题时,原来是使用{{#if template}}进行了无记录的方法,但是后来Ember 2.x已经弃用了这个问题,并且新的语法{{#if hasBlock}}恰好符合我的措辞我的问题。

4 个答案:

答案 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