0

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 の間) で共有できる場所に配置したいので、編集する必要がある場合は、1 か所で編集するだけで済みます。 2つ以上....

私はすでに試し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 docsを参照してください。

于 2015-04-19T14:07:35.047 に答える