2015-09-04 58 views
2

我想用Knockout.JS和以下代码在我的HTML中调用JSON结果。Async getJSON with knockout.JS

$(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加载到提交属性之前。

我试图把线程睡觉,开始摇摇篮,但是,导致以下错误

Uncaught TypeError: Unable to process binding text: function(){return(). } Message: Cannot read property of null

我得到发生了什么,而我需要的,直到该JSON呼叫制止$(document).ready代码的执行完成。我试着用jQuery中的.done功能来实现这一点,但,导致下面的错误

Cannot read property 'done' of undefined

,因为我不是在淘汰赛经验可以在任何你们的点我在正确的方向?

+0

你也可以做一个懒加载检查这个http://jsfiddle.net/LkqTU/26523/。 –

回答

2

你的代码似乎很好。在你self.getSubmission函数,返回像

self.getSubmission = function() { 

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

的承诺目标“完成”未定义的,因为你没有用JavaScript对象承诺链接它。

+0

现在解决了这个问题,谢谢。现在要弄清楚为什么HTML –

+1

中没有显示使用'self.Submission(//你的值)'not'='约定。干杯 –