在JsRender中创建变量的好方法是什么?

时间:2017-07-25 22:39:59

标签: javascript variables jsrender

在JsRender模板中,块可以创建变量,所以我可以这样写:

{{if true ~myVariable=myExpensiveFunction()}}
  {{:~myVariable}} {{:~myVariable}}
{{/if}}

然而,伪造if很烦人。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您可以在模板外部初始化myVariable,那么您可以将其设为helper variable,并将其传递给:

var html = myTmpl.render(data, {myVariable:myExpensiveFunction()});

如果您需要在特定的模板/数据上下文中进行初始化,那么您可以使用contextual parameters,其范围限定为任何模板块。使用包装该上下文的标记。

如果上下文是模板中的顶级,那么:

  • 这是顶级数据,您可以传递上述帮助
  • 或者它是' partial'使用{{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}}包装器(如果不执行模板合成)。