所以这是我在Github工作的项目:https://github.com/joelt11753/Udacity-map
在这个程序中,我有一个从列表中创建的菜单。我正在使用HTML select元素过滤此菜单。默认情况下,显示所有内容。选择其他选项后,菜单将更改。目前的问题是每次运行过滤器时我都需要重置菜单列表。
查看app.js文件,它位于js文件夹中。在第8行,有一个计算的observable过滤菜单。请注意,在第10行,我将viewList()重置为空。它需要是空的,所以我可以根据用户的选择重新开始并过滤。但是,第10行仅在选择默认选项时有效。默认值为" if"第11行。第20行启动显示已过滤菜单的块。第21行的console.log显示正确的数字,但没有重置。基本上,我的问题是,为什么每次做出选择时重置都不起作用?如果您尝试使用该应用程序,当您选择其他选项(默认选项除外)时,该菜单应为空。但是,它不是。
谢谢你们!
答案 0 :(得分:1)
你可以这样做
var arr = [1,2,3,4];
arr.splice();
这将返回空数组。
答案 1 :(得分:0)
让我们从如何重置数组开始。此
this.viewList = [];
不起作用。为什么?想想viewList
最初是什么。这是ko.observableArray
。但是您正在分配一个普通数组,因此会丢失observableArray
提供的任何功能。清除它的正确方法是:
this.viewList.removeAll();
请注意,您不会将此表达式的值分配回viewList
。这是因为removeAll
会改变集合本身而不是创建新集合。还要考虑声明对象的永久引用:
var ViewModel = function () {
var self = this;
...
}
这是一般的好习惯,因为对象this
指向的可能会发生变化。但是这样,你就像创建对象时创建它的“快照”,换句话说,创建对象本身。回到您的问题,如果您使用viewList.removeAll()
,下拉列表下方显示的元素将正确更改。因为我不知道要显示的项目应该来自哪里(因为您只在console.log
˙branch中写了else
),请检查此项,如果还有其他问题,请更新您的问题左