如果你可以在模板外初始化myVariable,那么你可以将其设为helper variable,并传入:
var html = myTmpl.render(data, {myVariable:myExpensiveFunction()});
如果您需要在特定的模板/数据上下文中进行初始化,那么正如您所说,您可以使用contextual parameters,它的作用域是任何模板块。使用包装该上下文的标签。
如果上下文是模板中的顶级,则:
- 这是顶级数据,您可以像上面一样传入帮助器
- 或者它是从另一个(布局)模板呈现的“部分”模板,使用
{{someTag tmpl=.../}},在这种情况下,您可以从另一个模板中的调用标记设置上下文参数
- 否则它会针对数组进行渲染
对于最后一种情况,您可以使用{{include}}:
{{include ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/include}}
或者您可以在 noIteration 设置为 true 的情况下调用:
var html = myTmpl.render(data, [helpers,] true);
然后换行{{for}}:
{{for ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/for}}
编辑:
在您的特定情况下,根据您在下面添加的 cmets,您需要在 {{for someArray}} 内的项目块的上下文中进行初始化 - 以获取项目数据。
(其实你的item block是一个'partial'模板,使用{{for someArray tmpl=...}}调用,但基本问题是一样的)。
在这种情况下,您确实需要在顶级(为您)或{{for}} 中添加{{include}} 包装器(如果不进行模板组合)。