我在模板对象中渲染jsrender
模板。
var colorTmpl = {
"color": jQuery.templates("<span>{{:~val}}</span>"),
}
var jsrendertmpl = {};
jQuery.extend(jsrendertmpl, colorTmpl);
如果我访问jsrendertmpl.colorTmpl.render()
,它将呈现颜色模板。如果我将此tmpl模板标记包含在此类
{colorArr: ["white", "blue", "black"]}
{{for colorArr tmpl="jsrendertmpl.colorTmpl"/}}
它不会将子模板包含在父模板中。 因此,我添加了一个自定义标记,以在对象
中包含此子模板includetmpl: function(tmplname){
return Template.render(tmplVal, jObj);
},
如果我在父模板中包含子模板{{:~val}}
无法识别
包含自定义包含标记的父模板
{{for colorArr itemVar='~val'}}
{{includetmpl "color"}}
{{/for}}
没有子模板的父模板(工作正常)
{{for colorArr itemVar='~val'}}
<span>{{:~val}}</span>
{{/for}}
有没有办法访问该值。我使用{{setvar}}和{{:~getvar}}进行解决,但需要永久解决方案。
提前致谢。
答案 0 :(得分:1)
有几种方法可以实现该方案 - 即根据您传入的数据参数提供不同的模板。
例如,您可以将模板作为帮助程序传递:
$.views.helpers("myTemplates", {
color: $.templates("<span>{{:}}</span>"),
colorVal: $.templates("<span>{{:~val}}</span>")
});
并在
中使用它{{for colorArr tmpl=~myTemplates.color/}}
或tmplVar
是您选择的模板:“color”
{{for colorArr tmpl=~myTemplates[tmplVar]/}}
您也可以通过以下任一方式创建自定义标记:
$.views.tags("includetmpl", {
init: function(tagCtx) {
this.template = myTemplates[tagCtx.props.template];
}
});
或
$.views.tags("includetmpl2", {
render: function(val) {
return myTemplates[this.tagCtx.props.template].render(val, this.ctx);
}
});
(注意我如何将上下文传递给我的渲染函数,在第二个版本中,以便~val
可用...)
然后按以下方式使用它:
{{for colorArr}}{{includetmpl template="color"/}}{{/for}}
或
{{for colorArr itemVar="~val"}}{{includetmpl template="colorVal"/}}{{/for}}
有关以上所有内容,请参阅https://jsfiddle.net/BorisMoore/coezx8xj/ ...
我会更改你问题的标题以使其更清晰。