在Require.js文本插件模板中,我应该如何提供javascript方法?

时间:2012-11-06 03:06:34

标签: requirejs underscore.js requirejs-text

我正在使用Require.js和文本插件。我正在尝试创建一个类似这样的模板:

<%= somefunction(displayvalue) %>

我需要somefunction(...)可用于多个模板。如何将函数包装在多个位置使用的最佳方法是什么?我想把它变成一个模块,但我不知道如何将它传递给模板。

1 个答案:

答案 0 :(得分:4)

编译模板后,您会发现自己有一个要调用的函数,并传入一些参数。所以只需将您的函数作为参数传递:

var tpl = _.template( tplString );
tpl({ someFunction: function( val ) { /* do something */ } });

虽然,如果您只在模板数据中传递值,我认为您可能会更好。如果模板几乎没有逻辑,那么模板实际上更容易调试和维护。所以,相反,我会这样:

tpl({ someValue: someFunction( aValue ) });

在其他javascript模板引擎(如Handlebars)中,您实际上可以注册helpers functions,他们将在全球范围内大部分可用,以对您的模板数据执行操作。如果你真的需要在多个模板中使用相同的功能,我会考虑切换模板引擎。 Underscore提供了一个微模板引擎,因此,在某种程度上限制了辅助函数 - 虽然能够包含太多的逻辑......

在我看来,下划线模板适用于小型项目,应该谨慎使用。保持它们尽可能简单:if/else,打印数据,应该是它。如果您需要更多,请选择更完整的模板引擎。

但即便如此,你在模板中所做的所有逻辑都很难调试。

原来如此!保持简单。