在 JsRender 中创建变量的好方法是什么?
What is a good way to create a variable in JsRender?
在 JsRender 模板中,块可以创建变量,所以我可以这样写:
{{if true ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/if}}
然而,伪造的 if
很烦人。有没有更好的方法?
如果你可以在模板外初始化myVariable
,那么你可以把它做成一个helper variable,传入:
var html = myTmpl.render(data, {myVariable:myExpensiveFunction()});
如果您需要在特定的 template/data 上下文中进行初始化,那么正如您所说,您可以使用 contextual parameters,它适用于任何模板块。使用包装该上下文的标签。
如果上下文是模板中的顶级,则:
- 要么这是顶级数据,你可以像上面那样传入一个助手
- 或者它是从另一个(布局)模板呈现的 'partial' 模板,使用
{{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}}
编辑:
在您的特定情况下,根据您在下面添加的评论,您需要在 {{for someArray}}
中的项目块的上下文中进行初始化 - 以便获取项目数据。
(其实你的item block是一个使用{{for someArray tmpl=...}}
调用的'partial'模板,但是基本问题是一样的)
在这种情况下,如果不进行模板组合,您确实需要在顶层(为您)或 {{for}}
内添加一个 {{include}}
包装器。
在 JsRender 模板中,块可以创建变量,所以我可以这样写:
{{if true ~myVariable=myExpensiveFunction()}}
{{:~myVariable}} {{:~myVariable}}
{{/if}}
然而,伪造的 if
很烦人。有没有更好的方法?
如果你可以在模板外初始化myVariable
,那么你可以把它做成一个helper variable,传入:
var html = myTmpl.render(data, {myVariable:myExpensiveFunction()});
如果您需要在特定的 template/data 上下文中进行初始化,那么正如您所说,您可以使用 contextual parameters,它适用于任何模板块。使用包装该上下文的标签。
如果上下文是模板中的顶级,则:
- 要么这是顶级数据,你可以像上面那样传入一个助手
- 或者它是从另一个(布局)模板呈现的 'partial' 模板,使用
{{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}}
编辑:
在您的特定情况下,根据您在下面添加的评论,您需要在 {{for someArray}}
中的项目块的上下文中进行初始化 - 以便获取项目数据。
(其实你的item block是一个使用{{for someArray tmpl=...}}
调用的'partial'模板,但是基本问题是一样的)
在这种情况下,如果不进行模板组合,您确实需要在顶层(为您)或 {{for}}
内添加一个 {{include}}
包装器。