【问题标题】:Knockout: Mapping/binding JSON淘汰赛:映射/绑定 JSON
【发布时间】:2014-03-20 20:48:22
【问题描述】:

我是淘汰赛的新手。我正在尝试绑定从 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 &lt; 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 }

您能告诉我发生了什么问题吗?

【问题讨论】:

  • 也许你想用ko.mapping.fromJS(response)
  • 您如何查询/检查 ServerData?您通常会看到,如果您不打开 observable(错过括号):尝试 console.log(ServerData()); 看看是否有效。

标签: json knockout.js


【解决方案1】:

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

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

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

尝试像这样更改代码:

 function CompanyModel() {
     var self = this;

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

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2014-03-26
    • 2015-07-16
    • 1970-01-01
    • 2013-05-27
    • 2012-06-08
    • 1970-01-01
    • 2013-03-12
    • 2023-04-03
    相关资源
    最近更新 更多