9

KnockoutJSは初めてですが、今のところ気に入っています。私がやろうとしているのは、フォーム上の複数のフィールド/列とコントロールを使用してビューモデルのデータをフィルタリングすることですが、それを行う方法がわかりません。(うまくいけば)さらに説明させてください。

バックエンドデータベースからのJSONデータが入力されたビューモデルの監視可能なデータ配列があります。このデータのコレクションには、選択したアイテムのみを表示するように表示が変更されるようにフィルタリングしたい複数の列があります。リンクhttp://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.htmlに示されているように、ko.utils.arrayFilterとko.utils.stringStartsWithを使用した例に従いました。これは、検索タイプのフィルターとして最適ですが、データテーブル(ビューモデル)の1つのフィールドでのみ機能します。

最初の質問:この例を拡張して、テキストボックスに入力された値をビューモデルの複数の列で検索し、結果を表示用に返す方法はありますか?

ただし、さらに重要なのは、フォームにさまざまなタイプの複数のコントロール(値のリストを含むドロップダウン、さまざまなオプションを備えたラジオボタンなど)があり、選択したオプションに基づいて完全なデータセットをフィルタリングする必要がある状況です。これらのコントロールで。また、コントロールの有効な値は、ビューモデルデータセットのさまざまな列/フィールドに関連しています。

これが理にかなっていることを願っています。基本的に、これと同じ機能を持つWindowsフォームアプリを置き換えようとしています。つまり、Windowsフォームアプリの場合、すべてのフィルタリングオプションは、SQL選択の大きなwhere句を構築しています(たとえば、WHERE Name='ドロップダウンで選択された名前'ANDPriority IN(チェックされている1つ以上のチェックボックスオプション)AND View =選択したラジオボタンなど)。次に、SQLクエリがデータベースに送信され、結果がグリッドに配置されます。

それで、ビューモデルの複数のフィールドで複数のフィルター値を使用して(もちろんノックアウト)、すべてのデータをクライアント側でフィルター処理して表示する方法はありますか?または、Windowsアプリと同様のアイデアに従い、選択したオプションからwhere句を使用してデータベースを再クエリする必要がありますか?

ありがとう!

詳細が必要な場合はお知らせください(書面で説明するのは難しいです)。

4

1 に答える 1

15

このように、の用語を組み合わせるだけ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())
        });
    });

これはフィドルで働いています

于 2012-08-18T00:24:43.047 に答える