0
我写了一个简单的应用程序从服务器 C#代码 公共JsonResult阅读(){ VAR 产品= db.Products得到JSON数据; return Json(GetProducts(),JsonRequestBehavior.AllowGet); }knockoutJS JSON没有转换为可观察
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"}]
i之后具有解析JSON,我不能使用所解析的对象来更新observerable。
有谁知道为什么会发生这种情况?
感谢您的帮助,但是,即使我将代码更改为$ .getJSON(“http:// localhost:50998/Home/Read“,函数(data){self.products(JSON.parse(data)); });它仍然无法工作,是否有任何其他问题与我的代码。 – Roger 2012-01-18 20:19:27
所以你想让你的JSON中的每个项目的每个属性都是ko.observable?如果是的话,我建议使用knockouts贴图插件http://knockoutjs.com/documentation/plugins-mapping.html这将为你做到这一点。 – 2012-01-18 20:24:23
谢谢,我想要的是遵循knockoutjs学习中的同一个示例从odata获取所有电子邮件并绑定到列表,但是我写了一个操作返回JSON数据,因此我使用$ .getJSON获取数据,并且绑定到列表。在教程中,它不需要绑定每个项目的所有属性,只需获取数据并更新可观察文件夹,然后循环查看每封电子邮件。我会先尝试地图插件,看看它是否工作。 – Roger 2012-01-18 22:05:23