在多个 Meteor 模板的事件中放置辅助方法的位置

Where to put helper methods used in events for multiple Meteor templates

我知道我可以通过省略 var 来跨文件访问方法,但是 "best practices" 用于定义跨不同模板的模板事件使用的辅助方法的项目目录结构是什么。

比如我有:

template1.js:

Template.template1.events({
  'event': function () {
    helper();
   }
});

template2.js:

Template.template2.events({
  'event': function () {
    helper();
   }
});

我建议在 /client/scripts/globalHelpers.js

中定义此类函数

示例:

Template.registerHelper('foo',function(arg1,arg2){
  return arg1 + arg2;
});

然后你可以在任何地方使用这个函数,只需在它前面加上 Blaze._globalHelpers.:

var result = Blaze._globalHelpers.foo(param1, param2);

Meteor 的 "share code across files with globals" 方法的一个问题是,当您查看使用函数的文件时,您不知道函数在哪里定义。我更喜欢在每个需要导出变量的文件中定义一个全局变量。该变量与文件同名,首字母大写(或其他一些将其标识为 "export object" 的命名约定)。导出存储为该对象的属性。所以你可以创建一个名为 globalHelpers.js:

的文件
GlobalHelpers = {};
GlobalHelpers.helper = function () {
    // ...
};

然后用GlobalHelpers.helper()在其他文件中使用。如果您稍后再看这段代码,就会知道要在 globalHelpers.js 中查找 helper 函数。

如果文件导出单个 class 或集合,则可以只使用该对象作为导出对象。因此,您可以 Things = new Mongo.Collection....

而不是 things.jsThings = {}; Things.Things = new Mongo.Collection...

您可能需要将文件放在 lib 目录中,以便它在其他文件之前加载。

不要使用 Template.registerHelper 注册它,除非您想通过 {{ }} 调用直接从模板调用它。