0

我正在为一个新网站尝试一个 javscript 框架,而我今天开始使用 knockoutjs。现在我被卡住了,因为数据没有被渲染。希望任何人都可以指出我正确的方向。我正在使用knockoutjs 2.2.1 和knockout mapping 2.4.0。

我的视图模型如下所示:

var UserModel = function () {
    var self = this;
    self.user = ko.observable();

    // Load user.
    self.load = function() {
        self.loadUser();     
    };

    self.loadUser = function() {
        // Load the main user object
        $.getJSON('/api/v1/users/17368',
            function(data) {
                var loadedUser = {};
                console.dir(data);
                ko.mapping.fromJS(data, {}, loadedUser);
                self.user(loadedUser);
            }
        );
    };

}

$(document).ready(function () {
    var userModel = new UserModel();
    ko.applyBindings(userModel);
    userModel.load();
})

我可以看到数据是在 ajax 请求中加载的。更新:到目前为止,我尝试了不同的映射但没有成功:

ko.mapping.fromJS(data, {}, loadedUser);

ko.mapping.fromJS(data, loadedUser);

在上面的 loadUser 中,输出到控制台的数据如下所示:

Array[1]
  0: Object
    id: "17368"
    email: "john@domain.net"
    firstname: "John"
    lastname: "Morris"
    phone1: "000-1234567"

但是,此数据绑定片段中没有呈现任何内容。它因缺少姓氏或名字而窒息:

<table>
     <thead>
        <tr>
            <th>lastname</th>
            <th>firstname</th>
        </tr>
    </thead>    
    <tbody data-bind="foreach: user">
        <tr>
            <td><span data-bind="text: lastname"></span></td>
            <td><span data-bind="text: firstname"></span></td>
        </tr>                
    </tbody>
 </table>
4

1 回答 1

2

您不应该对用户使用foreach绑定,因为用户不是observable array. 改用with绑定:

<tbody data-bind="with: user">
    <tr>
        <td><span data-bind="text: lastname"></span></td>
        <td><span data-bind="text: firstname"></span></td>
    </tr>                
</tbody>
于 2013-02-05T13:17:13.573 回答