2

我正在使用 Require.js 和文本插件。我正在尝试创建一个具有以下内容的模板:

<%= somefunction(displayvalue) %>

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

4

1 回答 1

4

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

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

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

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

在其他 javascript 模板引擎(如 Handlebars)中,您实际上可以注册帮助函数,这些函数主要在全球范围内可用以对您的模板数据执行操作。如果您确实需要在多个模板中使用相同的功能,我会考虑切换模板引擎。Underscore 提供了一个微模板引擎,因此在某种程度上受限于辅助函数 - 尽管能够包含太多逻辑......

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

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

所以!把事情简单化。

于 2012-11-06T03:57:58.250 回答