1

尝试过滤具有多个条件的计算。我见过很多例子,return 语句嵌套了多个条件,但我真的不明白它们为什么起作用。我在这里的示例可能不是嵌套返回语句的候选者,但我不确定如何执行它。

//ko.utils.arrayFilter - filter the items using the filter text
viewModel.filteredItems = ko.computed(function() {
    var filter = this.filter().toLowerCase();
    if (!filter) {
        return this.items();
    } else {
        return ko.utils.arrayFilter(this.items(), function(item) {
            return (item.fullName().toLowerCase().indexOf(filter) > -1);
        });
    }

    //*** THIS LOGIC WORKS BY ITSELF BUT NOT COMBINED WITH THE ABOVE LOGIC ***
    //var t = this.selectedTag();
    //if (t == "all") return this.items();
    //return ko.utils.arrayFilter(this.items(), function(item) {
    //    return item.tag == t;
    //});

}, viewModel);

这是小提琴中的完整示例:http: //jsfiddle.net/boyus/qTb5Q/12/

提前致谢。

4

1 回答 1

1

我认为您计算的逻辑有点不正确,并且您没有在数据绑定中正确设置选定的标签。

查看http://jsfiddle.net/qTb5Q/14/以获得有效的解决方案。

这是更改后的计算函数:

  viewModel.filteredItems = ko.computed(function() {
      var filter = this.filter().toLowerCase();
      if (!filter) {
        var t = this.selectedTag().toLowerCase();
        if (!t || t == "all") return this.items();
        return ko.utils.arrayFilter(this.items(), function(item) {
            return item.tag().toLowerCase() == t;
        });
      } else {
          return ko.utils.arrayFilter(this.items(), function(item) {
              return (item.fullName().toLowerCase().indexOf(filter) > -1);
          });
      }
  }, viewModel);
于 2012-11-15T10:54:29.340 回答