KnockoutJS - 如何根据返回的JSON结果计算数据

时间:2017-06-27 18:57:07

标签: json knockout.js getjson

我正在尝试更改返回的JSON

中显示DOB resource.birthDate的方式

Knockout.js:

this.rows= ko.observableArray([]);

$.getJSON(
  "./malib/api-call.php",
  function (data) {
     self.rows(data.entry);
  }
);

和HTML:

           <tbody data-bind="foreach: rows">
            <tr data-bind="attr: { id: resource.id}, css: {'isSelected':$root.selPatient() == $data}, click: $parent.highlightPatient.bind($parent), event : { dblclick: $parent.selectPatient.bind($parent) }" >
                <td class="col_name" data-bind="text: resource.name[0].text"></td>
                <td class="col_dob" data-bind="text: resource.birthDate"></td>
                <td class="col_gender" data-bind="text: resource.gender"></td>
                <td class="col_address" data-bind="text: resource.address[0].line[0] + ', ' + resource.address[0].city + ' ' + resource.address[0].state + ' ' + resource.address[0].postalCode"></td>
            </tr>
        </tbody>

我在KnockoutJS部分添加了以下代码:

this.rows= ko.observableArray([]);

$.getJSON(
  "./malib/api-call.php",
  function (data) {
     self.rows(data.entry);

                        self.returnDOB = function(item) {

                            var nonusDOB = item.split("-");
                            return nonusDOB[2] +"/"+ nonusDOB[1] +"/"+ nonusDOB[0];
                        };  
  }
);

并替换为HTML:

<td class="col_dob" data-bind="text: returnDOB(resource.birthDate)"></td>

但该解决方案会抛出错误

Message: returnDOB is not defined

有关于此的任何提示吗?

1 个答案:

答案 0 :(得分:1)

绑定试图在函数存在之前执行您的函数。您应该在json请求之外创建函数。

self.returnDOB = function(item) {
    var nonusDOB = item.split("-");
    return nonusDOB[2] +"/"+ nonusDOB[1] +"/"+ nonusDOB[0];
}; 

$.getJSON(
  "./malib/api-call.php",
  function (data) {
    self.rows(data.entry); 
  }
);