テンプレートレンダリングの後にknockoutjsバインドイベント
-
25-10-2019 - |
質問
私はしばらく探してきましたが、これは新しい質問であり、タイトルが示唆するような繰り返しではないと確信しています。 :)
基本的に、jqueryテンプレートのようなものを使用するときにテンプレートをレンダリングした後にノックアウトJSが作成する購読可能なイベントがあるかどうかを調べようとしています。
内蔵の「AfterRender」を使用しますが、観察可能な配列がクリアされても発火しないことがわかりました。この問題を説明するためにこのデモを作成しました。 http://jsfiddle.net/farina/ywfv8/1/.
また、私はカスタムハンドラーを書くことができることを知っています...しかし、それは私が必要とするものにとって本当に不必要なようです。
テンプレートがレンダリングを終了した後に発射するイベントが1つだけ欲しいです。
解決
私の同僚は、私が家に帰る前に私たちが遊んでいた何かを使って、実際にこのこの夜に解決しました。
したがって、イベント「AfterRender」、「AfterAdd」、および「beforeremove」の「問題」全体が、「foreach」結合と組み合わせて異なる行動をとることです。 knockoutjsは彼らにこれを伝えるのに十分なほど素晴らしいです ページ, 、しかし、何らかの理由で、実際にそれを見るまで、それは実際に私のために沈みませんでした。
本当に機能するのは、「Foreach」バインディング全体を廃棄し、このようにノックアウトのネイティブ「データ」バインドを使用することです。
data-bind="template: { name: 'item-template', data: items, afterRender: caller }"
次に、「AfterRender」という名前が示すように正確に機能します。
私は、コレクションを繰り返してforeachなしで新しいUIをレンダリングすることはできないという印象を受けていましたが、これらの例はそれが機能することを示しています。
http://jsfiddle.net/farina/kufx2/1/ (オブジェクトアレイスタイルViewModelを使用)
http://jsfiddle.net/farina/qtzm2/1/ (機能スタイルViewModelを使用)
どちらか一方が必要な場合があるため、両方のViewModelスタイルの例を作成しました。
助けてくれてありがとうダン!
他のヒント
は beforeRemove
あなたが探しているものは何ですか?あなたがどのような行動を達成したいのかわかりません。このサンプルをチェックアウトしてください: http://jsfiddle.net/romanych/ywfv8/8/それはあなたが望むかどうかですか?