【问题标题】:How to change input helper's class based on some condition in Ember如何根据 Ember 中的某些条件更改输入助手的类
【发布时间】:2016-02-10 00:52:09
【问题描述】:

if 条件子句如何在输入助手中使用。

我试过了:

{{input class="{{if errors.name "style-error"}}" }}

导致构建错误。

这里的errors.name 是控制器的属性。

我认为是嵌套的双花括号导致语法错误,但不知道如何实现这种条件类声明。

【问题讨论】:

  • @Kitler 我知道嵌套花括号不能工作。我把它放在这里是为了说明我的目标。
  • 啊,对了,当我看到你的双引号时,我完全错过了。

标签: ember.js htmlbars


【解决方案1】:

因为input 在这里是一个 Ember 助手而不是 HTML 元素,所以使用 classBinding -

{{input classBinding="errors.name:style-error"}}

classBinding 采用<condition>:<class if true>:<class if false> 格式的以空格分隔的参数列表。所以在这种情况下,style-error 将在 errors.name 评估为 true 时应用(即密钥存在于哈希中)。

它的语法与bind-attr 相同。此外,:<class> 有效,<condition>::<class if false>。请参阅文档here

请注意,当前支持 classBinding(讨论 here),但预计在 3.0 之前的某个时间会弃用(带有适当的弃用警告),并引入尖括号组件。

【讨论】:

  • 这不起作用。 errors.name 这是控制器中的一个属性。
  • 查看我的编辑。如果还是不行,请问您使用的是什么版本的 ember?
  • v1.13.0 与 Ember-cli。有用。谢谢!属性记录在哪里?找不到有关此的任何文档。另外,如果这即将被弃用,那么替换策略是什么?
【解决方案2】:

您可以使用括号嵌套助手:

{{input class=(if errors.name "style-error")}}

您应该使用它而不是 xxxBinding="..." 语法


您可以使用concat 助手有条件地添加多个类:

有条件的添加静态+动态类:

{{input class=(if errors.name (concat "static-class " dynamicClass))}}

有条件地添加两个动态类:

{{input class=(if errors.name (concat dynamicClass1 " " dynamicClass2))}}

如果条件为真,则添加一个类,如果为假,则添加另一个:

{{input class=(if errors.name "style-error" "style-success")}}

仅当条件为假时才添加类:

{{input class=(unless errors.name "style-success")}}

两个条件:

{{input class=(concat (if errors.name "name-error") " " (if errors.date "date-error"))}}

对于更复杂的布尔算术(例如和/或/非、相等和比较),您可以使用ember-truth-helpers

【讨论】:

  • 太棒了!那么如果同时存在静态类和动态类,或者基于不同条件的两个动态类呢。
  • 非常有帮助的答案。然而,这种复杂性是 Ember.js 的缺点之一。
  • 确实如此,但这些是一些极端的例子。您应该向组件/控制器添加一个属性,而不是模板中的复杂逻辑
猜你喜欢
  • 2013-03-31
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多