如何在 Meteor 中将全局模板助手放在一起?

Posted

技术标签:

【中文标题】如何在 Meteor 中将全局模板助手放在一起?【英文标题】:How can I put global template helpers together in Meteor? 【发布时间】:2018-01-20 13:37:18 【问题描述】:

我有几个全局模板助手

Template.registerHelper("termSuffix",function());

Template.registerHelper("subjects",function());

Template.registerHelper("date",function());
...

我试过这个(像普通/本地模板助手)

Template.registerHelper(
      termSuffix:function(),
      subjects:function(),
      date:function()
);

但它会抛出Exception from Tracker recompute function:Error: No such function: termSuffix

【问题讨论】:

我不相信这是可能的。你有一个令人信服的理由想要这样做吗?如果它与非全局模板助手一致,那就太好了(r),但不支持这种语法(至少就文档而言)docs.meteor.com/v1.3.5/api/… 我的应用里Template.registerHelper太多了,好像不太整齐。 【参考方案1】:

全局帮助器不支持此语法。 DocsCode

如果您认为对库的更改足够引人注目,您可以提交拉取请求。

同时,您可以用自己的方法包装 Template.registerHelper 函数:

function registerGlobalHelpers(helpers)
    _.chain(helpers)
     .each( (fn, name) =>  Template.registerHelper(name, fn); )
     .value();
  

或在 underscorejs 中不带chaining 定义:

function registerGlobalHelpers(helpers)
  _.each(helpers, (fn, name) =>  Template.registerHelper(name, fn); );
  

然后像这样使用它:

registerGlobalHelpers(
      termSuffix:function(),
      subjects:function(),
      date:function()
)

【讨论】:

简洁、简洁、优雅。谢谢@JeremyK +1 这些命令大部分都是多余的,你可以使用_.each(helpers, (fn, name) => Template.registerHelper(name, fn); );就足够了。 @Styx,是的,.key() 可以而且应该被删除,以便简化 iteratee 函数 - 我会更新这个。其余的是偏好问题。我喜欢链接命令的流畅界面方法,所以一般使用 .chain / .value 和下划线。不可否认,当他们之间只剩下一个赞扬时,是否增加了很多价值是值得商榷的!我会将这两个选项都添加到答案中

以上是关于如何在 Meteor 中将全局模板助手放在一起?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Meteor 模板助手返回模板?

如何从 Meteor 模板将多个参数传递给空格键助手?

Meteor:从另一个助手访问模板助手(或变量)

如何使用 Meteor 模板助手编辑 Iron-Router 中作为参数传递的值?

在模板上下文中从另一个助手调用一个助手 (Meteor 0.9.4)

Meteor - 从子助手访问父模板变量