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

时间:2016-12-24 08:00:40

标签: javascript arrays knockout.js

所以这是我在Github工作的项目:https://github.com/joelt11753/Udacity-map

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

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

谢谢你们!

2 个答案:

答案 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),请检查此项,如果还有其他问题,请更新您的问题左