【问题标题】:JsRender: A template in a templateJsRender:模板中的模板
【发布时间】:2012-11-13 21:12:33
【问题描述】:

我对 jsrender 中的模板内的模板有疑问。或者更确切地说,它确实有效,只要我在页面上的脚本块中有它,就像这样:

<script id="template_1" type="text/x-jsrender">
<h2>{{>Title}}</h2>
<ul>    
    {{for Details tmpl="#template_2" /}}
</ul>
</script>

<script id="template_2" type="text/x-jsrender">
<li>
    {{>Headline}} - {{>Text}}
</li>
</script>

但是,当我希望将 template_2 移动到外部文件以使用其他位置时,我似乎无法让它再次工作。我尝试在以下方向创建另一个标签:

$.views.converters({
    insertDetailList: function (data) {
        $.get('/templates/_details.tmpl.htm', null, function (template) {

        var tmpl = $.templates(template);


        });
    }
});

但是,当我返回模板(渲染与否)时,它返回“未定义”。关于如何让它发挥作用的任何想法?我有很多具有此设置的模板,我希望将它们导出到单独的文件中,以便在更多地方使用:)

【问题讨论】:

  • 您是否反对在一个外部 .js 文件中定义您的脚本块,该文件只是包含在您的当前页面中?如果不是您,可以将脚本块 ID 与访问器一起使用并“正常”呈现。 $( "#template_2" ).render( 数据 );
  • 要从字符串编译模板,并让它们相互引用,请参阅:stackoverflow.com/questions/26762525/… -

标签: jsrender


【解决方案1】:

我不确定这是否有帮助,但这是我的方法...

// in a utility .js file
compileTemplates = function () {
    $.when(
        $.get(getPath("MyTableTemplate")),
        $.get(getPath("MyRowTemplate"))
    )
    .done(function (table, row) {
        $.templates({
            tmplTable: table[0],
            tmplRow: row[0]
        });
    });

...然后像往常一样嵌套它们...

<tbody>
    {{for MyItems tmpl='tmplRow' /}}
</tbody>

然后我在渲染之前调用 compileTemplates,jsRender 找出名称并相应地渲染。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多