我有一个下划线模板,大致如下所示:
<script type="text/template" id="list-template">
<%= listHeaderTemplate(); %>
stuff that
displays a list
<%= listFooterTemplate(); %>
</script>
<script type="text/template" id="list-footer-template">
<%= foo %>
</script>
<script>
listTemplate = _.template($("#list-template").html());
listHeaderTemplate = _.template($("#list-header-template").html());
listFooterTemplate = _.template($("#list-footer-template").html());
</script>
我想做的是将传递给listTemplate()的完整变量集传递给listFooterTemplate()。
listTemplate({foo: "foo"});
我可以通过修改list-template中对listHeaderTemplate()/ listFooterTemplate()的调用来实现这一点,以便将局部变量打包到一个字典中(即listFooterTemplate({foo:foo});)但这似乎相当麻烦,尤其是在使用大量变量的情况下,它要求我知道list-template内部list-footer-template可能使用哪些变量。
2条答案
按热度按时间lf5gs5x21#
编译Underscore模板时,Underscore会将模板翻过来,并构建一个函数,大致如下所示:
你不能依赖于被调用的参数
obj
,它迟早会被破坏。但是你应该安全地访问arguments
对象。有了arguments
,你就可以用和当前函数完全相同的参数来调用其他函数,而不必知道参数是什么,你只需要使用apply
。如果您的模板有
listHeaderTemplate
和listFooterTemplate
可用,您可以简单地说:一种简单的方法是将这些函数作为参数传递给模板:
演示:http://jsfiddle.net/ambiguous/vwjm1kta/
tmb3ates2#
或者,可以通过JSON.stringify和HTML data-* 属性传递数据对象。