17

私はしばらく探していましたが、これは新しい質問であり、タイトルが示唆するような繰り返しではないと確信しています。:)

基本的に、jQueryテンプレートのようなものを使用しているときに、テンプレートのレンダリング後にKnockoutJSが作成するサブスクライブ可能なイベントがあるかどうかを調べようとしています。

組み込みの「afterRender」を使用しますが、監視可能な配列がクリアされている場合は起動しないことがわかりました。私はその問題を説明するためにこのデモを作成しました:http://jsfiddle.net/farina/YWfV8/1/

また、カスタムハンドラーを作成できることも承知していますが、必要なものにはそれは本当に不要なようです。

テンプレートのレンダリングが終了した後に発生するイベントが1つだけ必要です。

4

2 に答える 2

29

私の同僚は、私が家に帰る前に私たちが遊んでいたものを使って、この昨夜を実際に解決しました。

したがって、イベント「afterRender」、「afterAdd」、および「beforeRemove」の「問題」全体は、「foreach」バインディングと組み合わせて動作が異なることです。KnockoutJSは、彼らのページでこれを説明するのに十分ですが、実際にそれを見るまで、何らかの理由で実際には沈みませんでした。

実際に機能するのは、「foreach」バインディング全体を破棄し、Knockoutのネイティブ「データ」バインディングを次のように使用することです。

data-bind="template: { name: 'item-template', data: items, afterRender: caller }"

その場合、「afterRender」は名前が示すとおりに機能します。

コレクションを繰り返して、foreachなしで新しいUIをレンダリングすることはできないという印象を受けましたが、これらの例は、それが機能することを示しています。

どちらか一方が必要になることがあるため、両方のViewModelスタイルの例を作成しました。

ダンの助けをありがとう!

于 2012-02-16T18:24:47.753 に答える
-1

beforeRemoveあなたが探しているものは何ですか?あなたがどのような行動を取りたいのかわかりません。このサンプルをチェックアウトしてください:http://jsfiddle.net/romanych/YWfV8/8/ それはあなたが望むものかどうか?

于 2012-02-16T10:33:51.057 に答える