22

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

例如,以块的形式:

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

或非块形式:

{{my-helper}}

帮助模板能够以某种方式检测到没有块并相应地表现的地方。例如,如果有某种方法可以检测到块,那就太好了:

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

对于我的要求,我需要有一些方法来输出一些东西,只有在没有块的情况下。

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

更新:

如果您对为什么我的问题与接受的答案相同感到困惑,那是因为 Ember 碰巧采用了新语法,这正是我最初想象的理想。当我第一次问这个问题时,结果发现有一种未记录的方法可以使用{{#if template}},但此后已被 Ember 2.x 弃用,并且有新的语法{{#if hasBlock}}恰好与我表达我的问题的方式相匹配。

4

4 回答 4

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

于 2013-09-25T20:13:01.953 回答
2

文档的链接在这里:http ://emberjs.com/api/classes/Ember.Component.html#property_template

文档没有明确说明以这种方式使用模板属性。由于Ember.Component类继承自Ember.View类,因此可以推断组件模板的行为类似于Ember.View布局模板。

于 2013-12-05T15:39:34.663 回答
1

“模板”已被弃用,取而代之的是部分,例如。

{{#if partial}}
  {{yield}}
{{else}}
  <p>Default content for inline (non-block) form of the component.</p>
{{/if}}
于 2014-08-25T08:32:02.453 回答
1

template目前不推荐直接访问,但是在这种情况下应该使用一个带有特征标记的hasBlock属性(基本上是在幕后工作)。!!template

特征标志是ember-views-component-block-info

这是合并拉取请求的链接:https ://github.com/emberjs/ember.js/pull/10461

于 2015-05-21T10:16:01.887 回答