asplnet mvc でノックアウトと jquery を使用しています。コントローラーで返された json オブジェクトからノックアウトを使用してバインディングを適用します。これは私のマークアップに適用されます。
ユーザーが画面上のボタンをクリックすると、コントローラー アクションが呼び出され、サーバーからデータが再度取得されます。
この時点で、新しい json オブジェクトをノックアウトに再バインドする必要がありますか、それともどのように処理されますか?
asplnet mvc でノックアウトと jquery を使用しています。コントローラーで返された json オブジェクトからノックアウトを使用してバインディングを適用します。これは私のマークアップに適用されます。
ユーザーが画面上のボタンをクリックすると、コントローラー アクションが呼び出され、サーバーからデータが再度取得されます。
この時点で、新しい json オブジェクトをノックアウトに再バインドする必要がありますか、それともどのように処理されますか?
ユーザーがボタンをクリックしてコントローラーアクションを呼び出すと、ページ全体の更新ではなく、AJAXポストバックとしてこれを実行していると想定しています。これが正しければ、いいえ、新しいjsonオブジェクトを再バインドする必要はありません。新しいjsonオブジェクトを使用してビューモデルを更新するだけで、残りはノックアウトが処理します。それが機能する方法は次のとおりです。
ページが最初に読み込まれるとき、ページにはコントローラーから返されたjavascriptオブジェクトがあります。このオブジェクトが、すべてのプロパティがノックアウトobservablesとobservableArraysである対応するオブジェクトに変換された場合、ノックアウトバインディングを適用した後、永続的な双方向データバインディング(つまり、モデルからページへ、およびページからモデルへ)を取得できます。 。
javascriptオブジェクトをすべてのプロパティがノックアウトオブザーバブルであるオブジェクトに変換する最も簡単な方法は、ノックアウトマッピングプラグインを使用することです。これを行ったら、ノックアウトのapplybindingsメソッドを使用してこれをページにバインドします。
したがって、最初のページの読み込み時に、これは次のように設定できます。
//load your data
var data = ... some code to retrieve your data
//convert this into a viewmodel having knockout observables as properties
MyPage.ViewModel = ko.mapping.fromJS(data);
//bind this viewmodel to all knockout bindings
ko.applyBindings(MyPage.ViewModel);
これで、AJAX呼び出しが行われ、新しいデータが取得されたときに、ViewModelを更新すると、ノックアウトによってUIが自動的に更新されます。
//AJAX call is made
var newdata = ... results from AJAX call
//Update viewmodel
MyPage.ViewModel.Property1(newdata.Property1);
MyPage.ViewModel.Property2(newdata.Property2);
...other properties...
...UI is automatically updated by knockout
ビューモデルが更新されると、ノックアウトの双方向データバインディングのおかげでUIが自動的に更新されます。したがって、ビューモデルを更新するだけで、ノックアウトはそのバインディングを自動的に適用し、UIの更新を処理します。