淘汰赛:映射/绑定JSON

时间:2014-02-20 05:20:59

标签: json knockout.js

我是淘汰赛的新手。我正在尝试绑定从ajax调用返回的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 }

你能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

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

此外,您需要定义self.CompanyList = ko.observable();并将设置值绑定到self.CompanyList(ServerData);中的该属性。 这一切都由ko.mapping.fromJS完成。来自Knockout Mapping文档:

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

尝试更改此代码:

 function CompanyModel() {
     var self = this;

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