根据条件Aurelia在HTML按钮上显示i18n文本

时间:2017-04-07 10:26:40

标签: html aurelia

您好我正在尝试根据布尔值动态更改文本。 我使用Aurelia和i18n,一个解决方案是只有一个返回你想要的方法。但是我想在html中使用它,因为我认为根据html代码中的bool更清楚地看到按钮将具有哪个文本。 这就是现在的样子:

<button>${account.changed ? '_cancel' | t : '_close' | t } </button>

这就是我的尝试:

<button>${account.changed ? ('_cancel' | t) : ('_close' | t) } </button>
<button>${account.changed ? ${'_cancel' | t} : ${'_close' | t} } </button>

我的任何尝试都以崩溃结束:

Error: Parser Error: Conditional expression account.changed ? '_cancel'  requires all 3 expressions at column 33 in [account.changed ? '_cancel' | t : '_close' | t ]

到目前为止我只使用了i18N:

<div>${'example | t'}</div>

根据以前的情况,永远不需要更改文本。

对于任何来到这里的人,我解决了这个问题:

innerHTML.bind="!account.changed ? close  : cancel"

和.js

   this.close = this.i18n.tr('_close');
   this.cancel = this.i18n.tr('_cancel');

我认为应该可以通过某种方式直接在带有aurelia的HTML中实现这一点

3 个答案:

答案 0 :(得分:1)

这就是我正在使用的:

<span t="_cancel" if.bind="account.changed"></span><span t="_close" if.bind="!account.changed"></span>

我被困在这一段时间,这是我发现的最佳方式。

答案 1 :(得分:1)

不幸的是,解析器目前不支持嵌套表达式。与此同时,你可以使用一些技巧:

<button ref="myButton" cancel-text="${'_cancel' | t}" close-text="${'_close' | t}">${account.changed ? myButton.cancelText : myButton.closeText}</button>

答案 2 :(得分:1)

如果您看一下ValueConverters在Aurelia中的工作方式,您会发现它们会利用管道符号。这就像你期望的经典unix样式管道一样,左表达式输出被转发到管道之后的下一个东西。

所以你的解决方案应该是这样的:

<button>${account.changed ? '_cancel' : '_close' | t }</button>

首先使用简写确定正确的字符串if语法及其结果传递给TValueConverter。