如何进行内联比较条件以在徽章中应用 class?

How to do an inline comparison condition to apply a class in emblem?

我想做这样的事情:

li class={aProperty=="alpha":active} Plain Text

我在这里使用 属性,看看它是否匹配一个值,而不是一个简单的布尔值。

这个的有效标志语法是什么?语法文档仅针对布尔 属性 条件显示此内容,并且执行类似我的示例的操作会导致浏览器错误和编译错误。

不幸的是,车把和徽章都只适用于布尔值。我不同意这个设计决定,但是你必须跳过一些步骤来添加帮助程序来处理它们,即使这样语法也不是很干净。

A​​FAIK,唯一的方法是通过 bool 属性.

在你的控制器中:

aPropertyAlpha: function() { 
  return this.get('aProperty')==='alpha'; 
}.property('aProperty')

在您的模板中:

li class={aPropertyAlpha:active}

此答案是针对以下人添加的评论:ahnbizcad 您也可以将此列表项放入组件中,并使用如下内容:

#list-item.emblem

'Raw text'

#list-item.coffee

tagName: 'li'
classNameBindings: ['activeItem']

activeItem: Ember.computed 'aProperty', ->
  if @get('aProperty') == 'alpha'
    return 'active'
  else
    return ''

然后你可以像这样从父视图在循环中调用它:

ul
  each availableProperties as |property|
    list-item aProperty=property

希望对遇到类似问题的人有所帮助。