0

サーバーからjson経由で送信されたモデルを、クライアントで作成したビューモデルにバインドし、Knockout.jsを使用してバインドしてデータを表示しようとしています。私は次のコードを持っています

function tireRunDataViewModel() {
        var self = this;

        self.load = function() {
            $.jQuery.post('./GetTireRunModel', { outingID: '@Model' }, function (result) {
                self.data = ko.mapping.fromJS(result);
            } , "json");
        };

        self.load();
    }

var viewModel = new tireRunDataViewModel();
ko.applyBindings(viewModel);

ko.applyBindingsが実行される前にself.dataが設定されていないように見えます。これはなぜですか?applyBindingsが実行される前にself.dataが入力されていることを確認するにはどうすればよいですか?

4

1 に答える 1

1

の呼び出し$.jQuery.postは非同期であるため、コールバックは完了するまで実行されません。完了するまで、コールバックko.applyBindingsは呼び出されます。

いくつかのオプション:

  • コールバックを呼び出すことができko.applyBindingsます。アプリケーションがこれよりも複雑でない場合は、AJAX呼び出しの完了後にバインディングを適用するオプションになる可能性があります。

  • オブザーバブルとして作成self.dataし、コールバックで次のように更新できますself.data(ko.mapping.fromJS(result));。次に、UIで、に依存するUIの周囲にwithバインディングを使用して、準備ができるまでレンダリングされないようにすることができます。datadata

それのクイックシミュレーション:http://jsfiddle.net/rniemeyer/Wf8E8/

于 2012-06-14T18:40:58.620 に答える