0

私はjQueryやJavaScriptプログラミングに非常に慣れていないので、noob関連の間違いを許してください。

SlickGridを使用して会社のWebアプリを作成しています。このアプリは、ユーザーの役割に基づいて異なるデータセットをロードするため、フィールドはハードコーディングされるのではなく、動的なSQLクエリによって定義されます。

SlickGridのフォークにあるAndrewChildのフィルターを、マスターブランチの最新バージョンに適用したいと思います。この例では、フィルターが表示されます:https ://github.com/andrewchilds/SlickGrid/blob/master/examples/example15-fork-feature-demo.html

フィルタリングヘッダー要素を追加するためのコントロールを作成しました(ページャーコントロールをテンプレートとして使用)。見栄えがいいです!今、私はそれを機能させる必要があります。次のhttps://github.com/mleibman/SlickGrid/blob/master/examples/example4-model.htmlでは、この関数を変更して列をループし、フィルターの種類と列名を返す必要があるようです。フィルタの種類と列名をハードコーディングします。

function myFilter(item, args) {
  if (item["percentComplete"] < args.percentCompleteThreshold) {
    return false;
  }

  if (args.searchString != "" && item["title"].indexOf(args.searchString) == -1) {
    return false;
  }

  return true;
}

私の質問は次のとおりです。

  1. 私は正しい軌道に乗っていることにさえ近づいていますか?
  2. はいの場合、myFilter()とdataView.compileFilter()を変更するにはどうすればよいですか?

ご協力いただきありがとうございます!

4

1 に答える 1

0

SOへようこそ!

フィルタ関数(このmyFilter場合)は、DataViewのすべてのアイテム(行)に適用されます。列がハードコーディングされていない場合は、を使用して列のリストを取得できますgrid.getColumns()。例として、私のフィルター関数を見てみましょう。

function filter(item) {
  for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
        var c = grid.getColumns()[grid.getColumnIndex(columnId)];
        if(c.field == "...") {
            // return filtered items
        }
        else {
            // return false
        }
    }
  }
return true;
}

これcolumnFiltersは、フィルタリングする値を含む配列です。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-08-24T19:57:47.983 に答える