Meteor JS:组织代码以在模板助手之间共享代码

Meteor JS: Organizing Code for Sharing Code Between Template Helpers

在我的 Meteor JS 项目的 client/templates/pages 文件夹中,我有这些文件:

1.) admin_add_product.html 和 admin_add_product.js

2.) admin_edit_product.html 和 admin_edit_product.js

在 admin_add_product.js 和 admin_edit_product.js 中,我对这两个文件使用的代码完全相同:

var ucwords = function(str)
{
  return str.split(" ").map(function(i){return i[0].toUpperCase() + i.substring(1)}).join(" ");
};


var editForDB = function(str){

  return ucwords(str.trim());
}

var makeHidden = function(object){
  object.addClass('hidden');
}

var removeHidden = function(object){
  object.removeClass('hidden');
}

var makeDisabled = function(object){
  object.addClass('disabled');
}

var removeDisabled = function(object){
  object.removeClass('disabled');
}

我想组织我的代码,这样我就不会不必要地重复任何代码。我希望将上面的代码片段放在我可以在模板助手之间共享的地方(在本例中是 admin_add_product.js 和 admin_edit_product.js 之间)所以如果我确实需要编辑它我只需要编辑它一个地方而不是两个或更多地方....

我已经尝试过 Template.registerHelper 但我发现它只能在 .html 文件中使用......

如何在 Meteor JS 中组织我的代码来执行此操作?

假设每个模板帮助文件都包含在一个 function(){} 闭包中,这在 Meteor JS 中甚至可能吗???

用 var 声明的变量有一个文件范围,而且确实像你提到的那样在一个闭包中。但是,如果您在不使用 var 关键字的情况下声明新变量,则它们在整个项目中都可以访问(假设您以正确的顺序加载文件),因为 Meteor 在闭包之外声明了这些变量。

在您的情况下,解决方案是声明不带 var 的表单函数,或者最好声明一个不带 var 的新对象并将它们作为方法放入其中:

FormHelpers = {};

FormHelpers.ucwords = function(str)
{
  return str.split(" ").map(function(i){return i[0].toUpperCase() + i.substring(1)}).join(" ");
};

...

然后您可以在添加和编辑 tenplates 或任何其他需要它们的地方使用这些助手。

Meteor docs 中有关命名空间的更多信息。