Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js KnockoutJS不渲染_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Knockout.js KnockoutJS不渲染

Knockout.js KnockoutJS不渲染,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,我正在为一个新网站尝试一个javscript框架,就在今天,我开始使用knockoutjs。现在我被卡住了,因为数据没有呈现。希望任何人都能给我指出正确的方向。我正在使用knockoutjs2.2.1和knockoutmapping 2.4.0 我的viewmodel如下所示: var UserModel = function () { var self = this; self.user = ko.observable(); // Load user. sel

我正在为一个新网站尝试一个javscript框架,就在今天,我开始使用knockoutjs。现在我被卡住了,因为数据没有呈现。希望任何人都能给我指出正确的方向。我正在使用knockoutjs2.2.1和knockoutmapping 2.4.0

我的viewmodel如下所示:

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();
})
Array[1]
  0: Object
    id: "17368"
    email: "john@domain.net"
    firstname: "John"
    lastname: "Morris"
    phone1: "000-1234567"
我可以看到数据加载到ajax请求中。更新:到目前为止,我尝试了不同的映射,但没有成功:

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

ko.mapping.fromJS(data, loadedUser);
在loadUser中,向控制台输出的数据如下所示:

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();
})
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>

姓氏
名字

您不应该为用户使用
foreach
绑定,因为用户不是
可观察数组
。将
绑定一起使用:

<tbody data-bind="with: user">
    <tr>
        <td><span data-bind="text: lastname"></span></td>
        <td><span data-bind="text: firstname"></span></td>
    </tr>                
</tbody>


self.user
user如果您想拥有多个用户,它不应该是一个
ko.observearray()
,好的,谢谢。这可能更近了一步,但不幸的是,这没有什么区别-
消息:ReferenceError:lastname没有定义。映射中可能存在错误。我看到getJson返回一个数组,但您只需要一项。尝试以这种方式调用映射:ko.mapping.fromJS(数据[0],{},loadedUser);