使用 concat 助手渲染组件

Posted

技术标签:

【中文标题】使用 concat 助手渲染组件【英文标题】:Render component with concat helper 【发布时间】:2017-11-10 14:13:59 【问题描述】:

有没有办法将 htmlBars 中的组件作为 concat 助手中传递的参数呈现? 我有fa-icon ember 组件和显示标签的自定义组件。我需要像这样显示它:

my-simple-button label=(concat (fa-icon "pencil") " " (t "myAwesomeTranslate"))

但是,很明显,fa-icon 是一个组件而不是一个助手。

更新。 谢谢!事实上,我将ember-async-button 与自定义消息一起使用,因此我必须编写类似

#async-button as |component state|
  #if state.isPending
    if pendingLabel pendingLabel (t 'site.actions.pending')
  else if state.isDefault
    label
  else if state.isRejected
    label
  else if state.isFulfilled
    label
  /if
/async-button

所以我想要一个像my-simple-button 这样的包装器,它接受labelpendingLabel 并隐藏那些ifs。所以我不能使用块,因为我需要在 4 个地方设置图标。我看到的唯一选择是对iconpendingIcon 属性使用ifs,但这会使代码难看。所以基本上我想知道是否有办法简化这个......

【问题讨论】:

这里需要给出更多的上下文,fa-icon组件代码js/hbs。你认为调用/渲染组件会返回一些数据吗? 【参考方案1】:

据我所知,这是不可能的。即使它以某种晦涩难懂的方式传递,传递一个预渲染的组件似乎也很麻烦。

为此,正确的方法是将yield 作为标签的一部分,这是 Ember 中用于从外部范围渲染组件的内置机制。

// inside templates/components/my-simple-button.hbs
yield label

那么您可以将fa-icon 作为my-simple-button 的子级传递:

#my-simple-button label="myAwesomeTranslate"
  fa-icon "pencil"
/my-simple-button

它会渲染fa-icon "pencil" 而不是yield

如果您希望my-simple-button 专门支持图标,您可以包含icon 属性并使用fa-icon 而不是yield

// inside templates/components/my-simple-button.hbs
#if iconfa-icon icon/if label

然后像这样传递它:

my-simple-button label="myAwesomeTranslate" icon="pencil"

【讨论】:

我正在准备一个游戏。 Here it is。和你的想法完全一样!

以上是关于使用 concat 助手渲染组件的主要内容,如果未能解决你的问题,请参考以下文章

带有 grunt 的 Concat bower 组件

Kotlin+组件化 打造自己的AI语音助手

vue滚动列表和其他组件联动效果,怎么实现呢?

vuex中助手函数的几种使用技巧总结

vuex中助手函数的几种使用技巧总结

javascript 模拟组件助手