1

Imが会社のアプリに取り組んでいて、ソースコードを貼り付けることができないため、これを例で説明するのは困難です。できるだけ簡単に説明しようと思います。

このアプリは、特に、モジュールの読み込みにrequire.jsを含むknockout.jsとjqueryを使用しています。リスト内の名前の編集、削除、更新、キャンセルの動作に基づいて、リンクに起因する多数のJquery関数を定義するカスタムbindingHandlerを定義しました。

  1. ユーザーは、ノックアウトAppViewModelにバインドされた入力に名前を入力します。彼らは追加ボタンをクリックしてそれをobservableArrayに追加し、それがブラウザに出力されます。

  2. これを行ったら、[編集]をクリックして名前を編集するか、削除リンクを使用して名前を削除します。

  3. [編集]をクリックすると、新しいdiv(以前は非表示)が表示され、テキストボックスで名前を編集し、[更新]を選択して新しい名前をリストに追加するか、キャンセルして非表示に戻すことができます。編集可能なリスト。

ただし、私の問題は、ユーザーが編集プロセス中に入力ボックスで名前を変更してから[キャンセル]を選択した場合でも、元の名前ではなく新しい名前が追加されることです。

問題は単にこのjQuery関数にあると確信しています。

          $(element).find('.cancelBtn').on('click', function() {      
              $(element).find('.editRow, .detailRow').toggle();
          });  

しかし、私は確信していません、トグルまたは非表示機能は入力ボックスの値を送信しますか?

入力タグ自体は名前にバインドされています。

これはappViewModelに対応します:... self.name = ko.observable('');

観察可能なバインディングが双方向であるために、名前の元の状態に戻ることができず、リンクがクリックされる前に入力ボックスに入力された更新された名前が変更されるのを単に観察し続けるのではないかと疑問に思っていますか?

4

1 に答える 1

1

inputバインディングを使用してオブザーバブルにバインドするvalueと、デフォルトでは、変更イベントが発生したときにオブザーバブルが更新されます。「valueUpdate」追加バインディングを使用して、追加のイベントを追加して更新をトリガーすることができます (keyup など) が、変更イベントは常に追加されます。したがって、ユーザーが入力を編集してからフィールドを離れると、オブザーバブルが更新されます。

オブザーバブルへの書き込みを更新/キャンセルできるようにしたい場合は、この投稿で説明した手法のようなものを見たいと思うかもしれません: http://www.knockmeout.net/2011/03/guard- your-model-accept-or-cancel-edits.html

于 2012-07-17T15:06:11.640 に答える