【问题标题】:Async getJSON with knockout.JS带有knockout.JS的异步getJSON
【发布时间】:2015-11-30 11:18:19
【问题描述】:

我正在尝试使用 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 加载到提交属性之前发生的。

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

未捕获的类型错误:无法处理绑定文本:函数 (){return ()。 } 消息:无法读取 null 的属性

我知道发生了什么,我需要停止执行 $(document).ready 代码,直到 JSON 调用完成。我尝试使用 jQuery 中的.done 函数来实现这一点,但这导致了以下错误

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

由于我在淘汰赛方面没有那么经验丰富,你们中的任何人都可以为我指出正确的方向吗?

【问题讨论】:

标签: javascript jquery json knockout.js


【解决方案1】:

您的代码看起来不错。在您的 self.getSubmission 函数中,返回 promise 对象,如

self.getSubmission = function () {

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

'done' 未定义,因为您没有将它与 javascript promise 对象链接起来。

【讨论】:

  • 这个问题现在已经解决了,谢谢。现在弄清楚为什么没有在 HTML 中显示
  • 使用 self.Submission(//your value) 而不是 = 约定。欢呼
猜你喜欢
  • 2012-11-16
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 2012-06-30
  • 2016-07-14
  • 2013-06-01
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多