1

我试图让 HTML 有条件地出现在 ractive 模板中,但没有成功。

正如您在这个JSFiddle中看到的那样,结果并不像预期的那样 - 表是单行。

我的模板:

<table border="1">
    <tr>
    {{#list:num}}
        <td>{{.}}</td>
        {{#if num > 0 && num % 2 == 0}}
               </tr><tr>  
        {{/if}}
    {{/list}}
    </tr>
</table>

我的Javascript:

var ractive = new Ractive({
    el: "#cont",
    template: "#template",
    data: {
        list: [1, 2, 3, 4, 5, 6]
    }
});
4

1 回答 1

3

与生成 HTML 字符串的传统模板系统不同,Ractive 模板的每个部分都必须独立有效,否则无法构建虚拟 DOM。这意味着你不能</tr><tr>在一个部分内。(真的,解析器应该抛出一个错误——我在 GitHub 上提出了一个问题。)

另一种方法是对项目进行分组,然后对这些组进行迭代:

var ractive = new Ractive({
    el: "#cont",
    template: "#template",
    data: {
        list: [1, 2, 3, 4, 5, 6]
    },
    computed: {
        grouped: function () {
            var list = this.get( 'list' ),
                grouped = [],
                group;
            
            group = [];
            grouped.push( group );
            
            list.forEach( function ( item, i ) {
                if ( i > 0 && i % 2 == 0 ) {
                    group = [];
                    grouped.push( group );
                }
                
                group.push( item );
            });
            
            return grouped;
        }
    }
});
<script src="http://cdn.ractivejs.org/0.6.0/ractive.js"></script>

<script type="text/html" id="template" >
    <table border="1">
        {{#each grouped}}
            <tr>
                {{#each this}}
                    <td>{{.}}</td>
                {{/each}}
            </tr>
        {{/each}}
    </table>
</script>

<div id="cont"></div>

于 2014-10-11T14:29:19.010 回答