2014-02-20 81 views
0

我是新来的淘汰赛。我试图绑定从Ajax调用返回的json,但没有发生。淘汰赛:映射/绑定JSON

<script type="text/javascript"> 
var ServerData; 

$(document).ready(function() { 
     ko.setTemplateEngine(new ko.nativeTemplateEngine); 
     var oViewModel = new CompanyModel(); 
     oViewModel.Newitem(new Company("","","","","","","","","","","","","","","")); 
     ko.applyBindings(oViewModel); 
     BasicDatatable('#TableCompany'); 
}); 

function CompanyModel() { 
    var self = this; 
    self.CompanyList = ko.observable(); 
    $.getJSON("getallcompanies", function (response) { 
     ServerData = ko.mapping.fromJSON(response); 
     self.CompanyList(ServerData); 
    }); 
} 

response我有所需的数据。但在ServerData我得到以下,而不是列表。

function b() { if (0 < arguments.length) { if (!b.equalityComparer || !b.equalityComparer(d, arguments[0])) b.H(), d = arguments[0], b.G(); return this } r.T.Ha(b); return d }

可以请你让我知道什么错?

+0

也许你想用'ko.mapping.fromJS(响应)' –

+0

你如何查询/检查ServerData?你通常会看到,如果你没有解包observable(关闭括号):尝试'console.log(ServerData());'看看是否有效。 – Tanner

回答

0

您应该使用ko.mapping.fromJS来绑定来自服务器的JSON。

此外,您不需要需要定义self.CompanyList = ko.observable();并将设置值绑定到该属性在self.CompanyList(ServerData);。 全部由ko.mapping.fromJS完成。从挖空映射文档:

  • 对象的所有属性都转换为可观察。如果 更新会更改该值,则会更新可观察值。数组转换为可观察数组。如果更新 更改项目数量,它将执行相应的 添加/删除操作。它还会尝试保持原始JavaScript数组的排序与 相同。

试图改变这样的代码:

function CompanyModel() { 
    var self = this; 

    $.getJSON("getallcompanies", function (response) { 
     ko.mapping.fromJSON(response, {}, self); 
    }); 
}