使用 Knockout 使用多个字段/列和控件来过滤 ViewModel 数据

2024-05-01

我是 KnockoutJS 的新手,但到目前为止我很喜欢它。我想做的是使用表单上的多个字段/列和控件来过滤我的视图模型的数据,但我不知道该怎么做。让我(希望)进一步解释一下。

我有一个 viewmodel 可观察的数据数组,其中填充了来自后端数据库的 JSON 数据。这个数据集合有多个列,我想对其进行过滤,以便显示更改为仅显示选定的项目。我按照链接中所示的使用 ko.utils.arrayFilter 和 ko.utils.stringStartsWith 的示例进行操作http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html。这作为一种搜索类型的过滤器非常有效 - 但仅限于我的数据表(视图模型)中的一个字段。

第一个问题:有没有办法扩展此示例,以便在视图模型的多列中搜索在文本框中键入的值,并返回结果进行显示?

然而,更重要的是,我的情况是,表单上有多个不同类型的控件(带有值列表的下拉列表、带有不同选项的单选按钮等),并且我需要根据所选选项过滤完整数据集在这些控制中。并且,控件的有效值与视图模型数据集中的不同列/字段相关。

我希望这是有道理的。基本上,我们正在尝试替换具有相同功能的 Windows 表单应用程序。也就是说,对于 Windows 窗体应用程序,所有过滤选项都为 SQL 选择构建一个大的 where 子句(例如,WHERE Name = '在下拉列表中选择的名称' AND Priority IN(选中的一个或多个复选框选项)AND View = 选定的单选按钮等)。然后将 SQL 查询发送到数据库,并将结果放入网格中。

那么,有什么方法可以让我在视图模型中的多个字段上使用多个过滤器值(当然还有淘汰赛)来过滤并在客户端显示我的数据?或者我是否必须遵循与 Windows 应用程序类似的想法,并使用所选选项中的 where 子句重新查询数据库?

Thanks!

如果您需要更多详细信息,请告诉我(很难以书面形式解释)。


您只需将您的术语组合起来arrayFilter, 像这样。

self.filteredRecords = ko.computed(function() {
        return ko.utils.arrayFilter(self.records(), function(r) {
            return (self.idSearch().length == 0 ||
                       ko.utils.stringStartsWith(r.id, self.idSearch())) &&
                   (self.nameSearch().length == 0 || 
                       ko.utils.stringStartsWith(r.name.toLowerCase(), self.nameSearch().toLowerCase())) &&
                  (self.townSearch().length == 0 ||
                       r.homeTown == self.townSearch())
        });
    });

这是在工作fiddle http://jsfiddle.net/tyrsius/67kgm/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Knockout 使用多个字段/列和控件来过滤 ViewModel 数据 的相关文章