1

複数の条件で計算されたものをフィルタリングしようとしています。return ステートメントが複数の条件でネストされている例をたくさん見てきましたが、なぜそれらが機能するのか本当にわかりません。ここでの私の例は、ネストされた 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 に答える