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

标签 javascript binding templating ractivejs

我正在使用 Ractive.JS 绑定(bind):

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

但条件仍然为假,并且类别未设置。

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

最佳答案

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

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

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

作为替代方案,您也可以这样做

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

关于javascript - RactiveJS:如何测试模板表达式中的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637416/

相关文章:

javascript - 如何使用 Javascript 逐行获取 div 内容?

javascript - webpack、rollup 等模块打包器如何处理相同依赖项的两个不同版本?

C# WPF DatePicker 绑定(bind)

twig - 有条件地在 Twig 2 中定义一个 block

javascript - 在 javaScript 中使用 for 循环时如何为特定元素设置属性?

javascript - 如何在 Firestore 中访问 "Get all documents in a collection"?

c# - 为什么我的绑定(bind)只能以一种方式工作?

c# - 使用 ViewModels 通过按钮将文本框绑定(bind)到文本 block

javascript - mustache 条件语句(if/else)不起作用

panel - 根据选定的模板变量隐藏 grafana 面板