2012-11-13 92 views
1

我在jsrender中的模板中遇到问题。或者更确切地说,它实际上做的工作,只要我有它在脚本块在页面上,就像这样: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); 


     }); 
    } 
}); 

当我返回模板然而(渲染或不),它返回'未定义'。任何想法如何让这个工作?我有很多与此设置的模板,我想已经出口到使用单独的文件在更多的地方:)

+0

您是否反对在您刚刚包含到当前页面的外部.js文件中定义脚本块?如果不是你,可以在访问器上使用脚本块ID并呈现'正常'。 $(“#template_2”).render(data); –

+0

对于从字符串编译模板,并让它们互相引用,请参阅:http://stackoverflow.com/questions/26762525/jsrender-nested-templates-with-string-markup - – BorisMoore

回答

0

我不知道这会有所帮助,但是这是我的方法......

// 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计算出的名称和相应的呈现。