我正在使用Require.js和文本插件。我正在尝试创建一个类似这样的模板:
<%= somefunction(displayvalue) %>
我需要somefunction(...)可用于多个模板。如何将函数包装在多个位置使用的最佳方法是什么?我想把它变成一个模块,但我不知道如何将它传递给模板。
答案 0 :(得分:4)
编译模板后,您会发现自己有一个要调用的函数,并传入一些参数。所以只需将您的函数作为参数传递:
var tpl = _.template( tplString );
tpl({ someFunction: function( val ) { /* do something */ } });
虽然,如果您只在模板数据中传递值,我认为您可能会更好。如果模板几乎没有逻辑,那么模板实际上更容易调试和维护。所以,相反,我会这样:
tpl({ someValue: someFunction( aValue ) });
在其他javascript模板引擎(如Handlebars)中,您实际上可以注册helpers functions,他们将在全球范围内大部分可用,以对您的模板数据执行操作。如果你真的需要在多个模板中使用相同的功能,我会考虑切换模板引擎。 Underscore提供了一个微模板引擎,因此,在某种程度上限制了辅助函数 - 虽然能够包含太多的逻辑......
在我看来,下划线模板适用于小型项目,应该谨慎使用。保持它们尽可能简单:if/else
,打印数据,应该是它。如果您需要更多,请选择更完整的模板引擎。
但即便如此,你在模板中所做的所有逻辑都很难调试。
原来如此!保持简单。