Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 Knockout.JS数组-尝试重置数组不工作_Javascript_Arrays_Knockout.js - Fatal编程技术网

Javascript Knockout.JS数组-尝试重置数组不工作

Javascript Knockout.JS数组-尝试重置数组不工作,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,下面是我在Github工作的项目: 在这个程序中,我有一个从列表中创建的菜单。我正在使用HTML选择元素筛选此菜单。默认情况下,将显示所有内容。选择其他选项时,菜单将更改。目前的问题是,每次运行过滤器时,我都需要重置菜单列表 看看app.js文件,它在js文件夹中。在第8行有一个过滤菜单的计算可观测值。请注意,在第10行,我将viewList()重置为空。它需要为空,以便我可以开始刷新并根据用户选择进行过滤。但是,第10行仅在选择默认选项时有效。第11行的默认值为“如果”。第20行开始显示过滤菜

下面是我在Github工作的项目:

在这个程序中,我有一个从列表中创建的菜单。我正在使用HTML选择元素筛选此菜单。默认情况下,将显示所有内容。选择其他选项时,菜单将更改。目前的问题是,每次运行过滤器时,我都需要重置菜单列表

看看app.js文件,它在js文件夹中。在第8行有一个过滤菜单的计算可观测值。请注意,在第10行,我将viewList()重置为空。它需要为空,以便我可以开始刷新并根据用户选择进行过滤。但是,第10行仅在选择默认选项时有效。第11行的默认值为“如果”。第20行开始显示过滤菜单的块。第21行的console.log显示正确的数字,但没有重置。基本上,我的问题是,为什么每次选择时重置都不起作用?如果您尝试该应用程序,当您选择默认选项以外的其他选项时,菜单应为空。但事实并非如此

谢谢大家

你可以这样做

var arr = [1,2,3,4];
arr.splice();

这将返回空数组。

让我们从如何重置数组开始。这个

this.viewList = [];
这是行不通的。为什么?因为先想想
viewList
是什么。这是一个
ko.observearray
。但是您正在分配一个普通数组,因此会丢失
observableArray
提供的任何功能。正确的清除方法是:

this.viewList.removeAll();
请注意,您不会将此表达式的值赋回到
viewList
。这是因为
removeAll
会改变集合本身,而不是创建新集合。还可以考虑声明对对象的永久引用:

var ViewModel = function () {
    var self = this;
    ...
}

这是一种普遍的良好做法,因为该指向的对象可能会更改。但通过这种方式,您创建的是对象创建时的“快照”,换句话说,就是创建的对象本身。回到您的问题,如果使用
viewList.removeAll()
,dropdownlist下面显示的元素将正确更改。因为我不知道要显示的项目应该从哪里来(因为您只在
else
˙分支中编写了
控制台.log
),请检查此项,如果还有任何问题,请更新您的问题。

您可以在javascript arr=[1,2,3,4]中清除这样的数组;arr.splice(0)…很酷,这样就可以工作了。但是,为什么不将数组设置为空,例如=[];工作