Meteor JS: организация кода для обмена кодом между помощниками по шаблонам

В папке client/templates/pages моего проекта Meteor JS Project у меня есть эти файлы:

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(){}???


person preston    schedule 19.04.2015    source источник


Ответы (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.

person Sander van den Akker    schedule 19.04.2015
comment
Привет, а если бы это был модуль? Следовательно, модуль является самовызывающейся функцией, и я хотел бы поделиться этим? это просто вопрос FormHelpers.Mymodule = (function(){//do something})(); ??? - person preston; 02.09.2015