9

完全なviewModelを更新するにはどうすればよいですか?

  1. ページの読み込み時にモデルを取得し、それを使用ko.mapping.fromJS(myObject)してviewModelに変換します。
  2. ユーザーがボタンをクリックした場合、サーバーから更新されたデータを取得したい
  3. 今、私はこれらの更新を適用したい

使用するko.applyBindings(viewModel);と、UIが完全に更新されます。しかし、同じイベントが再び追加されます。したがって、ユーザーがボタンをクリックすると、イベントは2回、3回というように発生します。

質問

私の完全なviewModelを更新するための良い方法は何ですか。たぶん私はバインディングを削除して再度適用しますか?(これを行う方法)。

サンプル

var viewModel;

function update() 
{
    $.ajax({
        url: '...',
        type: "GET",
        statusCode: {
            200: function (data) {
                 viewModel = ko.mapping.fromJS(data);
                 ko.applyBindings(viewModel);
            }
        }
    });    
}

// first call after page load
update();

// user click
$("#myButton").click(function() {
    update(); 
});

アップデート

Steve Greatrexカスタムバインディングの実装を投稿していただけますか?

ko.bindingHandlers.domBinding = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        viewModel.domElement = element;
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        viewModel.domElement = element;
    },
};
4

2 に答える 2

10

マッピングのドキュメントの「更新対象の指定」を見れば、マッピングの対象を指定できます。

これは、次のように言えることを意味します。

if (!viewModel)
   viewModel = ko.mapping.fromJS(data);
else
   ko.mapping.fromJS(data, {}, viewModel); 

このようにして、最初の読み込み時にビュー モデルを作成し、その後の読み込みのためにそのビュー モデルを更新します。

于 2012-08-02T13:43:46.663 に答える
3

マッピングプラグインを使用してこれを行いました

ko.mapping.fromJS(JsonResponse, myObservable());

それで全部です。

于 2012-09-27T17:27:23.403 に答える