在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(){}闭包内???
答案 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中有关命名空间的更多信息。