私は優れたテンプレート エンジンが大好きですが、単純なマークアップを使用してロジックを HTML コントロールから切り離すことができます。
ブートストラップはクラスを使用してこれを行い、データ属性もより正確な制御のために機能します。
コードを少しクリーンアップする必要があります。必要なすべてのコードを収集し、すべての参照を任意の ID にデタッチします。通常、ID を使用するスポットは 1 つまたは 2 つしかなく、変数を使用して残りの操作を実行するため、これは難しくありません。
すべてのコードを、要素を唯一の引数として受け取る 1 つの関数にまとめます。これは、以前は ID にハードコードされたものでした。コードで使用されているすべての ID をクラスに移動するか、できれば変数に移動します。これらのクラスおよび/またはウィジェット クラスの子孫を反映するように CSS を変更します (近日中に)。この時点で、関数を呼び出して要素を渡し、機能させることができるはずです。これを makeSearchFromElement() と呼びましょう。
function makeSearchFromElement(elm){
elm.onchange=function(e){ alert("searching for " + elm.value); };
}
それができたら、必要なのはそれらを定義する簡単な方法だけです。例として「widget-search」のクラスを使用してみましょう。パッケージ内の検索機能が必要な html 要素にクラスを追加します。
<input class='search widget-search validation' id=search123 type=search />
あとは、HTML で宣言されているすべてのウィジェットを見つけて、サイト全体の JS ファイルのどこかにあるウィジェット メーカーに送信するだけです。
[].slice
.call(document.getElementsByClassName("widget-search"))
.map(makeSearchFromElement);
body タグの最後に挿入しない場合は、その最後のビットを ready() または onload() イベントに配置する必要があります。
HTML にクラスを追加するだけで、入力がデモの「検索」機能を持つようにするために必要なことはこれだけです。CSS や JS を 1 行ずつ追加する必要はありません。サイト上の各コードに 1 か所からパッチを適用したり、アップグレードしたりできます。また、ネットワーク経由で送信されるカスタム コードの量が減るため、手動でバインドしたり、テンプレートを作成したりするよりもページの読み込みが速くなります。