0

在我的 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 中是否可能?

4

1 回答 1

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 文档中有关命名空间的更多信息。

于 2015-04-19T14:07:35.047 回答