2

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

JsFiddle 代码在这里

的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);
4

1 回答 1

3

注册转换器仅用于各种形式的{{: ...}}标签 ( 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}},对“真实”的测试test也不需要是布尔类型。OTOH,如果您想让“假”或“0”成为假,那么您确实需要一个助手/转换器。

于 2014-05-02T17:27:04.283 回答