JsRender Deep嵌套数据模板

时间:2013-12-10 21:51:45

标签: jsrender

当执行 for循环<时,是否有办法检索存储在子对象中的模板( AKA,一个存储在父对象的数组中的子对象) / strong>并在子对象上应用该模板?

我知道这个问题有点令人困惑。下面是一些使事情更清晰的代码。

以下构造函数代表我的模型:

function group (children) {
    this.children = children;
}
group.prototype.jsTmpl = $1_10_2.templates('<div class="group">{{for children tmpl=jsTmpl /}}</div>');
group.prototype.render = function(selector){
    $1_10_2(selector).html(this.jsTmpl.render(this));
}


function item (title) {
    this.title = title;
}
item.prototype.jsTmpl = $1_10_2.templates('<div class="item">{{:title}}</div>');

我将唯一的jsRender模板存储在每个对象的原型中,以便在处理递归数据时可以轻松访问它。在这里,我正在使用四个“项目”对象子项新建一个“组”对象:

var vehicles = new group([
        new item('car'),
        new item('truck'),
        new item('van'),
        new item('bus'),
    ]);

现在,当我在我的车辆组实例上调用 vehicles.render(); 时,我希望如下:

Output: <div class="group">
            <div class="item">car</div>
            <div class="item">truck</div>
            <div class="item">van</div>
            <div class="item">bus</div>
        </div>

相反,我得到以下内容:

Output: <div class="group">
            <div class="group"></div>
            <div class="group"></div>
            <div class="group"></div>
            <div class="group"></div>
        </div>

我得出的结论是对象中的 tmpl = jsTmpl 始终引用对象的jsTemp属性,而不是当前孩子在for循环中。

我尝试将以下内容用于jsRender组模板:

'<div class="group">{{for children}}{{include tmpl=jsTmpl}}{{/for}}</div>'

但是jsRender不喜欢在for循环中包含一个include。

有没有办法获取孩子的模板并将其应用于父母的for循环?

1 个答案:

答案 0 :(得分:1)

很好的方法。

您错过了{{include}}上的结束斜线。否则它应该可以正常工作。

<div class="group">{{for children}}{{include tmpl=jsTmpl}/}}{{/for}}</div>