javascript - 单击一行时,KnockoutJS 返回一个空的 JSON 对象

标签 javascript json knockout.js

我的问题是,当我单击 KnockoutJS 中数据绑定(bind)的行时,发送到我的 selectItem 函数的数据为空,仅显示 {"data":{ }} 在 Firefox Web 控制台中。

我不明白的是如何获取表格单元格的值,以便我可以引用 JSON 对象的 sender 部分?目前,它是空的。

KnockoutJS:

function ServiceViewModel() {
   var self = this;
   self.rows = ko.observableArray();

   $.ajax({
          method: "GET",
          url: "URL",
          success: function(data) {
             var observableData = ko.mapping.fromJSON(data);
             var array = observableData();
             self.rows(array);
          }
   });

   self.computedRows = ko.computed(function() {
       if(!self.query()) {
          return self.rows();
       } else {
          return ko.utils.arrayFilter(self.rows(), function(row) {
             return row.sender() == self.query();
          });
       }
   });

   self.selectedItem = ko.observable();
   self.selectItem = function(data) {
       self.selectedItem(data);
       console.log(JSON.stringify(self.selectedItem()));
   };

};

$(document).ready(function() {
   var svc = new ServiceViewModel();
   ko.applyBindings(svc);
});

JSON:

[{"statusmsg":"OK","data":{"status":"running"},"sender":"hostname","statuscode":0}]

HTML:

<div class="table-responsive">
   <table class="table table-condensed table-striped table-bordered table-hover">
      <thead>
         <tr>
            <th>Host</th>
            <th>Status</th>
            <th>Actions</th>
         </tr>
      </thead>
      <tbody data-bind="foreach: computedRows().sort(function(l, r) { return l.sender() > r.sender() ? 1 : -1})">
         <tr data-bind="click: $root.selectItem">
            <td data-bind="text: sender"></td>
            <td><span data-bind="text: data.status"></span></td>
            <td>
               <div class="btn-group">
                  <button data-bind="click: $root.selectItem">Start</button>
                  <button>Stop</button>
               </div>
            </td>
         </tr>
      </tbody>
   </table>
</div>

最佳答案

您需要使用 ko.toJSON 将 knockout 模型转换为 json,而不是 JSON.stringify,因为 knockout 使用可观察量的函数。

console.log(ko.toJSON(self.selectedItem()));

关于javascript - 单击一行时,KnockoutJS 返回一个空的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619863/

相关文章:

javascript - 循环遍历 JSON 数组不起作用

javascript - knockout 原型(prototype)问题

Javascript 提示符/文本框只有数字

javascript - Div Not Center 在 Bootstrap 中使用类 ="center-block"

php - 将mysql中的行数显示到android中的textview中

javascript - Datatables init ajax请求初始值

javascript - Knockout.JS 标签在 foreach 中不起作用

javascript - 使用设置的电子邮件和密码自动登录Google for Youtube API

javascript - 如何使用 forEach 数组方法定位特定索引?

javascript - PHP的json_encode在JS解析时有时会丢失最后一个 '}'括号