尝试在 JsRender 中使用 allowCode 和 {{* window.counter++ }} 并使用布尔测试测试结果

Trying to use allowCode in JsRender with {{* window.counter++ }} and test the result using boolean test

我有以下模板

    <script type="text/x-widget-template" id="genericRowValues">
        {{* window.counter = 0}}
        {{props}}
            {{* console.log(counter == 0)}}
            {{if counter == 0}}
                {{* console.log("WHY YOU NO WORK!")}}
                <div class="row">
            {{/if}}
            <div class="col-lg-4">
                <div class="input-group" style="margin-bottom:5px;">
                    <b>{{>key}}</b>
                    <div class="well well-sm">
                        {{>prop}}
                    </div>
                </div>
            </div>
            {{if counter == 4}}
                {{* counter = 0}}
                </div>
            {{/if}}
            {{* counter++ }}
        {{/props}}
    </script>

我正在通过创建我的模板。

    var templateSource = $.templates(
        templateName,
        {
            markup: '#' + templateName,
            allowCode: true
        }   
    );

    for (var i = 0; i < dataSource.length; i++) {
        var template = templateSource.render(dataSource[i]);

我也在页面加载时调用它。

    $.views.settings.allowCode = true;

声明:

{{if counter == 0}}

并且:

{{if counter == 4}}

没有像我预期的那样工作。我是不是做错了什么?

我的控制台日志显示比较是正确的。然而,条件括号内的日志永远不会被命中。 :(

我的日志记录还显示计数器正在正确递增。

它可能是非常明显的东西,但我看不到它:(。

您正在修改 window.counter,但在布尔测试中您没有查看 window.counter 的值。 {{:counter}}{{if counter}} 正在访问当前数据项的计数器 属性 的值 - 这是对象 {key: ..., prop:...} 因为您在 {{props ...}} 的上下文中.

基本上你不能从常规标签访问全局变量 - 只能从 {{*...}}{{*:...}}

所以你可以做类似 {{* if (window.counter==4) { }} ... {{* } }} 的事情。

参见 http://www.jsviews.com/#allowcodetag