KnockoutJs:未定义dataObject

时间:2018-02-11 22:14:48

标签: javascript knockout.js

我有一个简单的WebApi项目来处理各种格式的返回数据。我正在尝试使用KnockoutJs来消耗前端的数据,但我有一个未定义的变量错误,我似乎无法理解为什么。下面是我正在处理的简单代码。请随时指出错误。感谢

控制器格式

[httpGet]
public Object Data
{
  return new {
   Time: DateTime.now,
   Text: "<b>Salut</b>",
   Count: 1
  };
}

JS前端

<script>
    $(document).ready(function(){
    $.ajax("/api/formats", {
       success: function(data){
          dataObject = ko.observable(data);
          ko.applyBindings();
       }
    };
 });

HTML

    <tbody>
       <tr>
         <td>Time</td>
         <td data-bind="text: dataObject().Time">
         <td>Text</td>
         <td data-bind="text: dataObject().Text">
      </tr>
   </tbody>

1 个答案:

答案 0 :(得分:1)

首先,您的变量dataObject没有TimeText属性,因此您应该在代码中检查它,如下所示:

var dataObject = ko.observable();
ko.applyBindings();
  
function doBinding() {
    var data = {
        Time: "XYZ",
        Text: "<b>Salut</b>",
        Count: 1
    };
    
    dataObject(data);        
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<div>

  <div data-bind="text: dataObject() ? dataObject().Time : 'No Data'"></div>
  <div data-bind="text: dataObject() ? dataObject().Text : 'No Data'"></div>
  
<div>

<button onclick="doBinding()">binding</button>