0

私のアプリには、追加ダイアログ (jquery ui) があります。コードは新しいビューモデル インスタンスを作成し、このダイアログをバインドしてダイアログを表示します。

ViewModelには、バインディングsaveを使用してダイアログのボタン(標準のjqueryダイアログボタンではなくカスタム)にバインドされるメソッドもありますclick:。ViewMode のこの保存メソッドはサーバーへの投稿を実行し、サーバーはデータを保持します。

ユーザーが追加ダイアログを開いてデータを入力し、保存ボタンをクリックすると、データがサーバーに送信され、ダイアログが閉じられko.cleanNode()、ダイアログ ノードに表示されます。

ユーザーが追加ダイアログを再度開き、新しいデータを入力して保存をクリックすると、ViewModel の保存バインディングが 2 回呼び出され、サーバーへの POST が 2 回送信されます。3 回目にダイアログを開くと、3 つの投稿があります。

viewmodel インスタンスのグローバル var を作成し、ダイアログを閉じたときにそれを null に設定しようとしましたが、それは役に立ちませんでした。save が 2 回以上呼び出されます。

似たようなものに遭遇したことがありますか?

4

1 に答える 1

2

clickダイアログを開くたびにイベントをバインドしていると思われます

@ rp-niemeyer がこの質問で言及しているように

ko.cleanNode は、要素に関連して作成されたデータ/計算をクリーンアップするために、Knockout によって内部的に使用されます。バインディングによって追加されたイベント ハンドラーは削除されません。

彼の推薦

したがって、このパターンを使用することはお勧めしません。より良いパターンは、セクションの周りで または テンプレート バインディングを使用し、新しいバインディングで再レンダリングできるようにすることです。

于 2013-10-14T10:52:55.893 に答える