无法使用jQuery / knockout获取JSON对象的文本值

时间:2012-10-18 20:47:37

标签: jquery json knockout.js

好吧我仍然有点模糊迭代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": ....

2 个答案:

答案 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) });