在JsRender模板中,块可以创建变量,所以我可以这样写:
{{if true ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/if}}
然而,伪造if
很烦人。还有更好的方法吗?
答案 0 :(得分:1)
如果您可以在模板外部初始化myVariable
,那么您可以将其设为helper variable,并将其传递给:
var html = myTmpl.render(data, {myVariable:myExpensiveFunction()});
如果您需要在特定的模板/数据上下文中进行初始化,那么您可以使用contextual parameters,其范围限定为任何模板块。使用包装该上下文的标记。
如果上下文是模板中的顶级,那么:
{{someTag tmpl=.../}}
从anothor(布局)模板呈现的模板,在这种情况下,您可以从其他模板中的调用标记设置上下文参数对于最后一种情况,您可以使用{{include}}
:
{{include ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/include}}
或者您可以将noIteration
设置为true来调用:
var html = myTmpl.render(data, [helpers,] true);
然后换入{{for}}
:
{{for ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/for}}
编辑:
在您的特定情况下,根据您在下面添加的评论,您需要在{{for someArray}}
中的项目块的上下文中初始化 - 以获取项目数据。
(实际上,您的商品功能块是使用{{for someArray tmpl=...}}
调用的部分'模板,但基本问题是相同的。)
在这种情况下,您确实需要在顶级(适合您)或{{include}}
内添加{{for}}
包装器(如果不执行模板合成)。