过滤后更新observableArray

时间:2017-03-21 16:56:52

标签: knockout.js

我有一个非常简单的视图模型。我有一个observableArray bind,可以通过调用customers进行过滤。这工作正常,我的视图得到更新。现在我想要一个函数来恢复observableArray viewModel.filterCustomers并在我调用customers时更新UI。

如果我打电话:

getCachedCustomers

viewModel.customers(viewModel.cachedCustomers()); 未更新。该数组仍然具有过滤后的元素。

这是一个"愚蠢的"我的问题的版本。任何帮助表示赞赏。

viewModel.customers()

1 个答案:

答案 0 :(得分:2)

我觉得你的视图模型比它需要的更复杂。

在我看来,你不需要filterCustomers方法,你需要的是有一个filteredCustomers计算的observable:

function myViewModel() {
    var self = this;
    this.customers = ko.observableArray([]);
    //use this observable in your markup to retrieve the filter
    this.searchFilter = ko.observable(''); 
    this.filteredCustomers = ko.computed(function () {
        var tempFilteredCustomers = self.customers();
        if (typeof self.searchFilter() == 'string' && self.searchFilter().length > 0) {
            //apply filter here on tempFilteredCustomers
        }
        return tempFilteredCustomers;
    }
}