ko で動作するdropdownchecklist jquery プラグインを取得しようとしています。カスタム バインディング ハンドラを接続しましたが、ドロップダウンにオプションが入力されません。私のフィドルをチェックしてください:http://jsfiddle.net/amitava82/wMH8J/11/
あなたの助けに感謝。ありがとう!
ko で動作するdropdownchecklist jquery プラグインを取得しようとしています。カスタム バインディング ハンドラを接続しましたが、ドロップダウンにオプションが入力されません。私のフィドルをチェックしてください:http://jsfiddle.net/amitava82/wMH8J/11/
あなたの助けに感謝。ありがとう!
@freakish answerはほとんどの静的コンテンツで機能しますが、テンプレートif
やforeach
バインディングなどを使用して動的なもの、または「突然」利用可能になるチェックボックスオプションの追加など、基になるデータ更新をサポートする必要がある場合は機能しません。
より単純なjQuery呼び出しをラップするために使用できる本当に単純な$.button
バインディング の例。apply
メンバーを追加controls
してバインディングで使用できるようにするのは簡単なことです。
options
jQueryドロップダウンチェックリストの場合は、組み込みのハンドラーを使用したいので少し注意が必要ですが、jQueryが依存するDOM要素を作成するため$.dropdownchecklist
、ハンドラーの実行後に実行する必要があります。組み込みのハンドラーをラップすることにより、常に正しいコンテキストで呼び出されます。options
options
私の使用経験(私たちのプロジェクトでは約10〜15のカスタムバインディングを使用しています)では、実際のJSの平均は約10〜20行になります。+100行に膨らみ始めたら、リファクタリングして再考することをお勧めします。これがお役に立てば幸いです:-)仕事中の主要なUI実装プロジェクトでKnockoutを数か月使用していて、本当にたくさんのことを学びました。このようなことに驚いています。
これは、KnockoutJS をバインドする前にドロップダウンを作成するためです。このドロップダウンはどのように機能しますか? selectのコンテンツをコピーして見栄えの良いリストを作成する追加のdivとspanを作成します。その後、バインディングが適用され、select が変更されますが (必要に応じて)、ドロップダウンは更新されません。これは、このライブラリが一種の静的であるためです。つまり、呼び出し時にのみselectの内容がコピーされます。
一時的な修正を確認できるように、 jsFiddleを更新しました。つまり、ドロップダウンを作成する前にバインディングが適用されるようになりました。唯一の問題は、options
フィールドを変更しviewModel
てもドロップダウンに影響しないことです。おそらく行う必要があるのは、subscribe メソッドを使用することです。フィールドへの変更を監視する必要があり、変更options
が発生した場合はドロップダウンを再作成する必要があります。それは少なくとも簡単な方法です。