使用post命令创建KnockoutJS ViewModel以填充ViewModel

时间:2012-06-14 18:33:07

标签: javascript knockout.js knockout-mapping-plugin

我正在尝试将来自服务器的模型通过json绑定到我在客户端上创建的viewmodel,然后使用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?

1 个答案:

答案 0 :(得分:1)

$.jQuery.post的调用是异步的,因此回调在完成之前不会执行,这是在ko.applyBindings被调用之后。

有两种选择:

  • 您可以在回调中拨打ko.applyBindings。如果您的应用程序并不复杂,那么在AJAX调用完成后应用绑定可以是一个选项。

  • 您可以创建self.data作为observable,然后在回调中更新它,如:self.data(ko.mapping.fromJS(result));。然后,在您的用户界面中,您可以在依赖于with的UI周围data使用data绑定,以便在它准备好之前不会呈现。

快速模拟它:http://jsfiddle.net/rniemeyer/Wf8E8/