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是异步的,所以回调在完成之前不会执行,也就是 afterko.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 回答