javascript - knockout 过滤

标签 javascript mvvm knockout.js

我已将以下过滤器添加到我的 View 模型中:

contactsViewModel.filterItems = ko.computed(function () {
                var filter = this.filterInput().toLowerCase();
                if (!filter || !this.hasEnoughChars()) {
                    // Simply keep the results if input is empty or less 3 chars are in it
                    return this.contacts();
                } else {
                    // iterate through the JSON again
                    return ko.utils.arrayFilter(this.contacts(), function (item) {                        
                        // Return the objects that contain the filter term
                        // ko.utils.stringContains is not part of knockout
                        // Manually added to knockout-2.2.0.debug.js line 238
                        return ko.utils.stringContains(item.firstName().toLowerCase(), filter)
                            || ko.utils.stringContains(item.lastName().toLowerCase(), filter)
                            || ko.utils.stringContains(item.email().toLowerCase(), filter)
                            || ko.utils.stringContains(item.company().toLowerCase(), filter);                        
                    });
                }
            }, contactsViewModel);

如何通过减少调用 stringContains 的次数来改进此代码? 我希望能够写:

return ko.utils.stringContains(item.FirstName().toLowerCase() || item.lastName().toLowerCase() || item.email().toLowerCase() || item.company().toLowerCase(), filter);

但是当我这样做时 stringContains 没有返回正确的值

knockout :

stringContains: function (string, contains) {
            string = string || "";
            return string.indexOf(contains) != -1;
        }

非常感谢您的帮助

最佳答案

使用ko.utils.arrayFilter:

return ko.utils.arrayFilter([item.FirstName().toLowerCase(), item.lastName().toLowerCase(), item.email().toLowerCase(), item.company().toLowerCase()], function (str) { return str.indexOf(filter) != -1  }).length > 0;

关于javascript - knockout 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13229970/

相关文章:

php - 无法从 PHP json_encode 解析 JS 中的 JSON 对象

silverlight - 使用 MVVM Light 从 ViewModel 查看通知

c# - 使用 CanExecute 参数调用 RelayCommand<T>

wpf - 如何将 DataTemplate 数据类型绑定(bind)到接收 ViewModels DI 注入(inject)的依赖项的 View

javascript - KnockoutJS - 基本模型架构

javascript - knockout ko.observableArray 不会刷新 View

knockout.js - 如何从子模型调用父方法(knockout)

javascript - 将文本数据保存到嵌套数组

javascript - 从 JavaScript 数组中删除元素

javascript - 以跨浏览器方式使用 Javascript 的 DOMParser 时,如何检测 XML 解析错误?