刚开始使用KnockOut Mapping来阅读一些JSON(使用Google Books API),但似乎无法让它工作。没有错误报告,但没有显示任何内容。可能是一个我忽略的简单问题,但感谢您的审核。
标记....
<body>
<h2>Find Cat in the Hat</h2>
<div>
<input id="booksearch" />
</div>
<div>
<table>
<thead>
<tr>
<th>Volumes</th>
</tr>
</thead>
<tbody data-bind="foreach: model.items">
<tr>
<td data-bind="text: model.id"></td>
</tr>
</tbody>
</table>
</div>
<input id="btnTest" type="button" value="button" />
</body>
<script src="/Scripts/jquery-1.8.2.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="/Scripts/knockout-2.2.0.js"></script>
<script src="/Scripts/knockout.mapping-latest.js"></script>
... Jquery的
$(document).ready(function () {
//Knockout Test
$('#btnTest').click(function () {
var url = "https://www.googleapis.com/books/v1/volumes?q=the+Cat+In+The+Hat";
var viewModel = {};
$.getJSON(url, function (data) {
viewModel.model = ko.mapping.fromJSON(data);
ko.applyBindings(viewModel);
});
});
});
答案 0 :(得分:2)
在$.getJSON
success callback中,您将获得一个JavaScript对象而不是JSON字符串:
成功回调传递返回的数据,通常为a 由JSON结构定义并解析的JavaScript对象或数组 使用$ .parseJSON()方法。它也传递了文本状态 回应
因此,您需要使用ko.mapping.fromJS(data);
方法而不是ko.mapping.fromJSON(data);
您的固定代码应如下所示:
$.getJSON(url, function (data) {
viewModel.model = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
});
您的观点中还有另一个问题:data-bind="text: model.id"
应data-bind="text: id"
您不需要model
,因为foreach
内部您处于上下文中model.items
:
<tbody data-bind="foreach: model.items">
<tr>
<td data-bind="text: id"></td>
</tr>
</tbody>
演示JSFiddle。