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

时间:2015-05-17 23:18:43

标签: meteor project-structure

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

例如,我有:

template1.js:

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

template2.js:

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

2 个答案:

答案 0 :(得分:3)

Meteor的“使用全局数据跨文件共享代码”方法的一个问题是,当您查看使用函数的文件时,您不知道函数的定义位置。我更喜欢在每个文件中定义一个需要导出变量的全局变量。该变量与文件具有相同的名称,具有初始大写(或其他一些将其标识为“导出对象”的命名约定)。导出存储为该对象的属性。因此,您可以创建名为globalHelpers.js的文件:

GlobalHelpers = {};
GlobalHelpers.helper = function () {
    // ...
};

然后在GlobalHelpers.helper()的其他文件中使用它。如果您稍后查看此代码,您就知道要查看globalHelpers.js以找到helper函数。

如果文件导出单个类或集合,则可以将该对象用作导出对象。因此things.js代替Things = {}; Things.Things = new Mongo.Collection...而不是Things = new Mongo.Collection...。{/ 1}}。

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

请勿在{{1​​}}注册,除非您想直接通过Template.registerHelper来电的模板进行调用。

答案 1 :(得分:0)

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

中定义这些功能

示例:

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

然后您可以在任何地方使用此功能,前缀为Blaze._globalHelpers.

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