Require.js とテキスト プラグインを使用しています。次のようなテンプレートを作成しようとしています。
<%= somefunction(displayvalue) %>
複数のテンプレートで使用できるようにするには、 somefunction(...) が必要です。複数の場所で使用する関数をラップする最良の方法は? モジュールにしようと思ったのですが、テンプレートに渡す方法がわかりません。
Require.js とテキスト プラグインを使用しています。次のようなテンプレートを作成しようとしています。
<%= somefunction(displayvalue) %>
複数のテンプレートで使用できるようにするには、 somefunction(...) が必要です。複数の場所で使用する関数をラップする最良の方法は? モジュールにしようと思ったのですが、テンプレートに渡す方法がわかりません。
テンプレートをコンパイルした後、呼び出す関数があることに気づき、いくつかの引数を渡します。したがって、関数を引数として渡すだけです。
var tpl = _.template( tplString );
tpl({ someFunction: function( val ) { /* do something */ } });
ただし、テンプレート データ内でのみ値を渡す方がよいと思います。テンプレートは、ロジックがほとんどない場合、実際にはデバッグと保守がはるかに簡単です。したがって、代わりに、次のようにします。
tpl({ someValue: someFunction( aValue ) });
他の JavaScript テンプレート エンジン (Handlebars など) では、テンプレート データに対してアクションを実行するためにほとんどグローバルに使用できるヘルパー関数を実際に登録できます。複数のテンプレート内で同じ関数を本当に使用する必要がある場合は、テンプレート エンジンを切り替えることを検討します。アンダースコアはマイクロテンプレートエンジンを提供するため、ヘルパー関数の周りに何らかの制限がありますが、あまりにも多くのロジックを含めることができます...
私の意見では、アンダースコア テンプレートは小さなプロジェクトに適しているため、慎重に使用する必要があります。それらをできるだけ単純にしてください: if/else
、印刷データ、それだけです。さらに必要な場合は、より完全なテンプレート エンジンを使用してください。
しかし、それでも、テンプレート内で行うすべてのロジックはデバッグが困難です。
そう!複雑にしないでおく。