質問

ユーザーがフィールドを変更すると、ユーザーが[送信]ボタンをクリックするのではなく、すぐに検証と更新がすぐにコミットされるフォームを備えたWebページを作成しようとしています。 knockout.jsとマッピングプラグインを使用しています。元のフィールドごとに計算されたフィールドを作成することでこれを達成できることはわかっていますが、この種の作業はTediusと愚かなことです。一般的なリスナーを作成して、任意のフィールドの変更とバックエンドをそれぞれ更新するための良い実践はありますか?

役に立ちましたか?

解決

変更をサブスクライブするには、ko.tojs()メソッドを使用できます。実際、それはオブジェクトグラフとオブザーバブルを解凍することを可能にします。 KO.computedを使用するときにおそらくご存知のように、それは観測可能なフィールドのすべての読み取りを購読し、すべての変更で再評価します。したがって、このようなコードを使用する場合:

ko.computed(function() {
   ko.toJS(viewModel);
   // update data on server
});

また、このコードが初期化の直後にサーバー上のデータを更新することに注意する必要があります。簡単に回避できます。この例を確認してください: http://jsfiddle.net/uaxxa/embedded/result/

また、変更されたデータのみをサーバーに送信することをお勧めします。 ko.editbalesプラグインを組み込むことができます( https://github.com/romanych/ko.editables )そして、いくつかのKOアンダーフードの知識。このサンプルをチェックアウトしてください: http://jsfiddle.net/romanych/rkn5k/

それがあなたを助けることができることを願っています。

他のヒント

いくつかのオプションがありますが、1つのリスナーが必要な場合は、1つの良い方法が、変更トラッカーを作成するために使用したのと同じコードを使用することです。観察可能な変更について単純に耳を傾けます。その約19行のコード。これをつかむことができ、変更に使用する代わりに、変更が発生したときに変更を保存する方法でワイヤーするだけです。

変更追跡をセットアップするには、このトラッカープロパティをビューモデルに追加します。

viewModel.tracker = new ChangeTracker(viewModel); 

これらをあなたのビューに引っ掛けて、変更がいつ発生するかを判断します。

viewModel.tracker().somethingHasChanged(); 

機能で状態をリセットするときにこれをビューモデルに接続します(例:ロード、保存):

viewModel.tracker().markCurrentStateAsClean; 

オプションで、状態追跡のために独自のハッシュ機能を渡すこともできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top