私は、knockout.jsで双方向バインディングを作成できることを知っています。これにより、ビューを変更するとjavascriptのモデルが変更され、その逆も行われます。この変更を通知してサーバーに送り返す方法が必要です。だから私はほとんどサーバーに投稿する必要があります。これどうやってするの?
これが意味するのは、どういうわけかイベントハンドラーをアタッチする必要があるため、モデルの1つを変更すると、変更がサーバーに自動的にポストバックされるということです。
私は、knockout.jsで双方向バインディングを作成できることを知っています。これにより、ビューを変更するとjavascriptのモデルが変更され、その逆も行われます。この変更を通知してサーバーに送り返す方法が必要です。だから私はほとんどサーバーに投稿する必要があります。これどうやってするの?
これが意味するのは、どういうわけかイベントハンドラーをアタッチする必要があるため、モデルの1つを変更すると、変更がサーバーに自動的にポストバックされるということです。
function MyViewModel() {
var self = this;
self.value1 = ko.observable();
self.value2 = ko.observable();
ko.computed(function() {
$.ajax({
url: '/path/to/server/endpoint',
type: 'POST',
data: {
value1: self.value1(),
value2: self.value2()
}
});
});
}
ビューモデルプロパティごとに個別の「手動サブスクリプション」は必要ありません。を定義するだけko.computed
です。すべてko.computed
のは、依存しているオブザーバブルへの変更が自動的に通知されます。上記のコードでは、計算はvalue1とvalue2のオブザーバブル(data
jQuery$.ajax
関数の引数)に依存します。オブザーバブルの値が変更されるたびに、ラップされたko.computed
関数が実行され、新しい値がサーバーに送信されます。
手動サブスクリプションはどうですか?
手動サブスクリプションは、ビューモデルのバインディングのように考えることができます。バインディングにより、UIはビューモデルの変更に反応できますが、手動サブスクリプションでは、ビューモデルがそれ自体の変更に反応できます。これは、ビューモデル内の他の関連オブジェクトを更新することを意味する場合があります。
一般的な例は、チェックボックスがオンになっている場合やドロップダウン値が変更されている場合など、別のオブザーバブルが変更されたときに、AJAXを介してオブザーバブルの更新をトリガーすることです。この場合、手動サブスクリプションは非同期の計算されたオブザーバブルのように機能します。
私はjson経由でそれを行います(一方向のみ):
json Stringからkoバインディングをロードします(例):
userSettingsModel = ko.mapping.fromJSON('${userSettingsJSON}');
ko.applyBindings(userSettingsModel);
変更されたkoオブジェクトをサーバーに送り返します(例):
function saveConferencesFilter() {
// console.log(ko.mapping.toJSON(userSettingsModel));
$.ajax({
type: 'PUT',
url: '/AudioPlace/userSettings/rest',
dataType: 'json',
contentType: 'application/json;charset=UTF-8',
data: ko.mapping.toJSON(userSettingsModel),
success: function (data) {
getConferences();
}
});
}