7

私は、knockout.jsで双方向バインディングを作成できることを知っています。これにより、ビューを変更するとjavascriptのモデルが変更され、その逆も行われます。この変更を通知してサーバーに送り返す方法が必要です。だから私はほとんどサーバーに投稿する必要があります。これどうやってするの?

これが意味するのは、どういうわけかイベントハンドラーをアタッチする必要があるため、モデルの1つを変更すると、変更がサーバーに自動的にポストバックされるということです。

4

3 に答える 3

15
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のオブザーバブル(datajQuery$.ajax関数の引数)に依存します。オブザーバブルの値が変更されるたびに、ラップされたko.computed関数が実行され、新しい値がサーバーに送信されます。

于 2012-10-31T18:55:39.397 に答える
1

手動サブスクリプションはどうですか?

  • 手動サブスクリプションは、ビューモデルのバインディングのように考えることができます。バインディングにより、UIはビューモデルの変更に反応できますが、手動サブスクリプションでは、ビューモデルがそれ自体の変更に反応できます。これは、ビューモデル内の他の関連オブジェクトを更新することを意味する場合があります。

  • 一般的な例は、チェックボックスがオンになっている場合やドロップダウン値が変更されている場合など、別のオブザーバブルが変更されたときに、AJAXを介してオブザーバブルの更新をトリガーすることです。この場合、手動サブスクリプションは非同期の計算されたオブザーバブルのように機能します。

于 2012-10-31T17:33:41.930 に答える
0

私は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();
        }
    });
}
于 2012-10-31T15:53:31.543 に答える