2

好吧,我仍然对遍历 javascript 对象有点模糊,所以希望你们能帮我解决这个问题。我正在使用 jQuery 和 Knockout 吐出作为 JSON 发送的服务器数据。一切似乎都很好,除了数组的实际值似乎没有应用,但我确实得到了表格行的构造并且没有错误,所以它必须与我的 Guest(data){} 函数一起使用。我觉得我可能将它指向键而不是值。看看我的代码和 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": ....
4

2 回答 2

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>
于 2012-10-18T21:06:38.007 回答
0

您的 json 返回一个对象数组。也许尝试像这样传递数组的第一个值(带有对象的那个):

var mappedGuests = $.map(json[0], function(item) { return new Guest(item) });
于 2012-10-18T20:50:23.680 回答