RactiveJS:如何在模板表达式中测试相等性?

时间:2014-05-13 17:01:39

标签: javascript binding templating ractivejs

我正在使用Ractive.JS绑定:

var alertsBinding = new Ractive({
    el: '.alerts',
    template: alertsTemplate,
    data: {
        alerts: alerts,
        selectedAlertID: null
    }
});

模板使用template expression来检测项目是否是当前选定的项目,并相应地添加一个类:

<div class="alert {{ id === selectedAlertID ? 'selected' }}">
  ...
</div>

选择项目后,我会运行:

alertsBinding.set({selectedAlertID: selectedAlert.id});

设置后,我可以看到条件总是为假,即使条件应该为真。我还通过添加以下内容进行了检查:

id{{ id}} selected{{ selectedAlertID}}

在警报内确认实际选择了该项目。

enter image description here

然而,条件仍然是错误的,并且没有设定课程。

如何在模板表达式中测试相等性?

1 个答案:

答案 0 :(得分:1)

表达式必须是合法的JavaScript;在这种情况下,需要有一个替代方案以及一个结果:

<div class="alert {{ id === selectedAlertID ? 'selected' : '' }}">
  ...
</div>

当解析器没有看到冒号后跟另一个表达式时,它会停止尝试解析三元表达式并回退到将其视为沼泽标准引用。如果解析器在这些情况下提供了更多反馈,那可能会有所帮助 - 我opened an issue on GitHub

作为替代方案,您也可以

<div class="alert {{# id===selectedAlertID }}selected{{/}}">
  ...
</div>