与knockout.JS异步getJSON

时间:2015-09-04 10:20:20

标签: javascript jquery json knockout.js

我正在尝试使用Knockout.JS在我的HTML中使用以下代码调用JSON结果。

$(document).ready(function () {
var submissionViewModel = new SubmissionModel();
submissionViewModel.getSubmission().done(function () {
    ko.applyBindings(submissionViewModel, document.getElementById("submission"));
  })
});

var SubmissionModel = function () {
var self = this;
self.Submission = ko.observable(null);

self.getSubmission = function () {

    $.getJSON('/Submission/GetSubmission',
        function (data) {
            self.Submission = ko.mapping.fromJSON(JSON.stringify(data));
        }
    );
  }
}

对于初学者来说,我对Knockout JS lib很新,所以请耐心等待。从我可以得到的是我的应用程序绑定发生在我的JSON加载到Submission属性之前。

我尝试将线放到床上并开始摇动摇篮,但这导致了以下错误

  

未捕获的TypeError:无法处理绑定文本:function(){return()。消息:无法读取null

的属性

我得到了正在发生的事情,我需要暂停执行$(document).ready代码,直到JSON调用完成。我尝试使用jQuery中的.done函数实现此目的,但这导致了以下错误

  

无法读取未定义的属性“已完成”

因为我不是那种经验丰富的淘汰赛,你们中的任何人都能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

你的代码似乎很好。在self.getSubmission函数中,返回承诺对象,如

self.getSubmission = function () {

    return $.getJSON('/Submission/GetSubmission',
        function (data) {
            self.Submission(ko.mapping.fromJSON(JSON.stringify(data)));
        }
    );
  }

'done'未定义,因为您没有使用javascript promise对象链接它。