javascript - 如何在 jsview if 语句中使用转换器?

标签 javascript jquery jquery-ui jsrender jsviews

所以,我只是想在“if”语句中将 int 转换为 bool。我不确定如何实现这一目标。我正在玩的代码如下。

JsFiddle code here

HTML:

<div id="main-div"></div>

<script id="testTmpl" type="text/x-jsrender">
    <input data-link="{:test:}" />
    <div data-link="{intToBool:test:}"></div>

    // testing different methods, none seem to work
    {^{if intToBool:test }}
        Woot! 1
    {{/if}}
    {^{if intToBool(test) }}
        Woot! 2
    {{/if}}
    {^{if ~root.intToBool(test) }}
        Woot! 3
    {{/if}}
</script>

JavaScript:

 $.views.converters({
    intToBool: function(val) {
      if (val === 0 || val === false || val === '0' || val === 'false') {
        return false;
      } else {
        return true;
      }
    }
  });

  function App(data) {
    self = this;

    self.test = 0;
  };

  var app = new App();

  var testTmpl = $.templates("#testTmpl");
  testTmpl.link("#main-div", app);

最佳答案

注册转换器仅用于 {{: ...}}标签 ( http://www.jsviews.com/#assigntag ) 的各种形式 {{cvt:expression}} {^{cvt:expression}} <div data-link="{cvt:expression}"><input data-link="{cvt:expression:cvtBack}" /> .参见 http://www.jsviews.com/#converters .

对于其他情况,您需要使用方法 {^{if someMethodOnMyModel(test)}}或助手 ( http://www.jsviews.com/#helpers ): {^{if ~someHelper(test)}} .

另见 http://www.jsviews.com/#samples/jsr/paths有关辅助路径的示例 - ~some.expression... - 辅助函数或辅助对象。注意 ~root是您传递给 render() 的顶级数据对象的内置辅助路径或 link() .

编辑: 事实上, JsRender 和 JsViews 中有一个鲜为人知的功能,可以让您将已注册的转换器与其他标签相关联。你可以写

{^{if test convert="intToBool" }}
    Woot!
{{/if}} 

但通常使用 ~intToBool(test) 可能更简单/更好- 更熟悉,在阅读模板时可能更容易理解。

顺便说一句 {{if test}}测试 'truthy' 所以 test不需要是 bool 类型。 OTOH 如果你想让“假”或“0”是假的,那么你确实需要一个助手/转换器。

关于javascript - 如何在 jsview if 语句中使用转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432317/

相关文章:

javascript - 网站真的需要迎合没有启用 Javascript 的浏览器吗?

javascript - 衡量在网页上花费的时间

jquery-ui - jQuery UI 自动完成宽度问题

javascript - 动态等高响应图像库

javascript - 如何在 JavaScript 中合并和分布第一个数组到第二个数组?

javascript - jQuery 数据表默认折叠

javascript - 通过 html.replace jquery 将文本包装在 <span> 元素中不起作用

javascript - 在事件上调用两个函数

jQuery 通用代码

javascript - 删除空文件的 Gulp 任务