Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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
Javascript 为什么一个可观察数组在我的模板上长度为0,而在我的JS中却不是knockout.JS?_Javascript_Knockout.js - Fatal编程技术网

Javascript 为什么一个可观察数组在我的模板上长度为0,而在我的JS中却不是knockout.JS?

Javascript 为什么一个可观察数组在我的模板上长度为0,而在我的JS中却不是knockout.JS?,javascript,knockout.js,Javascript,Knockout.js,我在knockout.js中使用条件渲染时遇到一些问题。我的视图模型中有一个observearray,它是使用ko.utils.arrayMap()创建的。在我的javascript代码中,输出该数组的长度将返回预期的长度。然而,当我试图在视图中输出相同的长度时,它总是0 以下是我的查看代码: Javascript: var data = [ { firstName: "Bob", lastName: "Smith" }, {

我在knockout.js中使用条件渲染时遇到一些问题。我的视图模型中有一个
observearray
,它是使用
ko.utils.arrayMap()
创建的。在我的javascript代码中,输出该数组的长度将返回预期的长度。然而,当我试图在视图中输出相同的长度时,它总是0

以下是我的查看代码:


Javascript:

var data = [
    {
        firstName: "Bob",
        lastName: "Smith"
    },
    {
        firstName: "John",
        lastName: "Doe"
    },
    {
        firstName: "Jane",
        lastName: "Doe"
    }
];

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

function ViewModel(data) {
    var self = this;
    self.people = ko.observableArray(ko.utils.arrayMap(data, function(i) {
        return ko.observable(new Person(i.firstName, i.lastName));
    }));
    console.log(self.people().length);  //Outputs 3, as expected
}

ko.applyBindings(new ViewModel(data));

如果替换视图模型中的可观察对象而不是指定给它,则可能会发生这种情况。您可能有
self.people=ko.observearray()在视图模型构造函数中。稍后,当您实际获得数据时,您有
self.people=ko.observearray(数据)


在本例中,视图模型知道数据,但视图绑定到早期的可观察对象,而不知道后期的可观察对象。相反,你应该有
self.people(数据)设置数据。

您的代码对我有效:…什么?也许这是其他地方的问题。在我的实际代码中,数据以json的形式来自服务器,并且我的可观察数组被正确填充。console.log(people().length)输出7,但在视图中输出0。谢谢!那正是我的问题