好吧我仍然有点模糊迭代javascript对象,所以希望你们能为我清除这一点。我正在使用jQuery和Knockout来吐出作为JSON发送的服务器数据。一切似乎工作得很好,除了数组的实际值似乎没有应用,但我得到表行构造,没有错误,所以它必须与我的Guest(数据){}函数。我觉得我可能把它指向键而不是值。看看我的代码和JSON结构,告诉我你的想法。
<table>
<tbody data-bind='foreach: guests'>
<tr>
<td data-bind='value: name'></td>
<td data-bind='value: email'></td>
<td data-bind='value: guests'></td>
<td data-bind='value: code'></td>
</tr>
</tbody>
</table>
<body>
</body>
<script type="text/javascript">
function Guest(data){
this.name = ko.observable(data.name);
this.email = ko.observable(data.email);
this.guests = ko.observable(data.guests);
this.code = ko.observable(data.code);
}
function guestListViewModel(){
//Data
var self = this;
self.guests = ko.observableArray([]);
$.getJSON('/php/guests_json.php', function(json) {
var mappedGuests = $.map(json, function(item) { return new Guest(item) });
console.log(mappedGuests);
self.guests(mappedGuests);
});
}
ko.applyBindings(new guestListViewModel);
</script>
这是服务器上JSON的样子。
[{
"id":"8",
"name":"Greg",
"email":"greg1@google.com",
"guests":"1",
"code":"GVTRKwRPXD2rETD10BMCWWAB",
"checked_in":"0"},
{
"id": ....
答案 0 :(得分:1)
啊,我明白了。它与我完美运行的JSON对象无关。您必须小心应用于元素的数据绑定类型。我使用输入'值'绑定器而不是文本跨度'文本'绑定器。
这解决了它:
<table>
<tbody data-bind='foreach: guests'>
<tr>
<td data-bind='text: name'></td>
<td data-bind='text: email'></td>
<td data-bind='text: guests'></td>
<td data-bind='text: code'></td>
</tr>
</tbody>
</table>
答案 1 :(得分:0)
你的json返回一个对象数组。也许尝试传递数组的第一个值(带有对象的那个),如下所示:
var mappedGuests = $.map(json[0], function(item) { return new Guest(item) });