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

时间:2015-04-19 12:41:51

标签: javascript meteor closures meteor-helper

在Meteor JS Project的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中组织我的代码来执行此操作?

这在Meteor JS中是否可行,因为假设每个模板助手文件都包含在function(){}闭包内???

1 个答案:

答案 0 :(得分:1)

使用var声明的变量具有文件范围,并且确实在您提到的闭包内。但是,如果您声明没有var关键字的新变量,则可以在整个项目中访问它们(假设您按正确的顺序加载文件),因为Meteor在闭包之外声明了这些变量。

在你的情况下,解决方案是声明你的表单函数没有var,或者更好地声明一个没有var的新对象并将它们作为方法放在那里:

FormHelpers = {};

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

...

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

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