knockoutJS不会将Json转换为可观察的

时间:2012-01-18 11:51:55

标签: javascript json model-view-controller knockout.js

我编写了一个简单的应用程序来从服务器获取JSON数据 C#代码         public JsonResult Read()         {             var products = db.Products;             返回Json(GetProducts(),JsonRequestBehavior.AllowGet);         }

    public IEnumerable<Product> GetProducts()
    {
        var data = db.Products.ToList();
        return (data);
    }

在视图中,我编写了以下内容来绑定视图模型数据。

<div>
<table data-bind="with: products">
    <thead><tr><th>From</th><th>To</th><th>Subject</th></tr></thead>
    <tbody data-bind="foreach: Object">
        <tr>
            <td data-bind="text: id"></td>
            <td data-bind="text: name"></td>
            <td data-bind="text: description"></td>
        </tr>    
    </tbody>
</table>
</div>
 <script type="text/javascript">
     function ProductsViewModel() {
         var self = this;
         self.products = ko.observable();
         $.getJSON("http://localhost:50998/Home/Read", function (data) {
             self.products = JSON.parse(data);
         });

}
     ko.applyBindings(new ProductsViewModel());
 </script>

Json数据从操作返回如下

[{"ID":1,"Name":"Roger","Description":"Test1"},{"ID":2,"Name":"Roger2","Description":"Test2"}]

在我解析了JSON之后,我无法使用已解析的对象来更新观察者。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

如果要将self.products的值(或任何其他可观察值的值)设置为JSON.parse的结果,则需要将其称为self.products(JSON.parse(data))。 Observable就像函数一样,所以你需要像函数一样对待它们; - )