将jsRender模板存储在单独的js文件中

pro*_*nis 17 jsrender

是否可以将jsRender模板存储在单独的文件中?

我想将它存储在一个单独的文件中,并在我的页面中引用它.

这样的事情

<script id="templateName" type="text/x-jsrender" src="thisIsTheTemplate.js"></script>
Run Code Online (Sandbox Code Playgroud)

我会赞美任何纪念或建议.

谢谢

bal*_*dre 21

是的,你可以做到这一点(我每次都使用它).

例如,假设您将模板放在一个template文件夹中并调用它_productDetails.tmpl.html

在您的页面中,您使用jQuery $.get()将其拉入并加载到模板中,如:

var renderExternalTmpl = function(item) {

    var file = '../templates/_' + item.name + '.tmpl.html';
    $.when($.get(file))
     .done(function(tmplData) {
         $.templates({ tmpl: tmplData });
         $(item.selector).html($.render.tmpl(item.data));
     });    
}
Run Code Online (Sandbox Code Playgroud)

并传递一个item包含所有3个属性的对象,例如:

renderExternalTmpl({ name: 'productDetails', selector: '#items', data: {} })
Run Code Online (Sandbox Code Playgroud)

你可以有一个很好的实用程序类来保存所有这些:

var my = my || {};
my.utils = (function() {
    var getPath = function(name) {
        return '../templates/_' + name + '.tmpl.html';
    },
    renderExtTemplate = function(item) {

        var file = getPath( item.name );
        $.when($.get(file))
         .done(function(tmplData) {
             $.templates({ tmpl: tmplData });
             $(item.selector).html($.render.tmpl(item.data));
         });    
    };

    return {
        getPath: getPath,
        renderExtTemplate: renderExtTemplate
    };
});
Run Code Online (Sandbox Code Playgroud)

你可以轻松打电话 my.utils.renderExtTemplate(item);

  • 为什么简单地设置模板的`<script>`元素的`src`属性不起作用(例如,`<script src ="_ productDetails.tmpl.html"type ="text/x-jsrender"id ="myTemplate "> </ SCRIPT>`)?那将是如此干净,美丽和直观. (7认同)
  • @Stefan我这样做,如果你想让浏览器缓存模板,那么只需使用`cache:true`,这样你就不需要每次请求都发送它. (2认同)