2

グリッドの HeaderRow を介してフィルタリングを実装していますが、解決できない問題に遭遇しました。

dataView イベント ハンドラーを示すすべての例では、グローバル変数を使用して、次のように関連するグリッドを識別します。

gridQMsgsDataView.onRowCountChanged.subscribe(rowCountChanged);

(...elsewhere...)

function rowCountChanged(e, args) {
    grid.updateRowCount();   //'grid' is a global variable assigned to a slickGrid.
    grid.render();
}

私が見つけた例とは異なり、slickjGrids と dataViews を実行時に動的に作成し、それらの参照変数を作成時にリストに保持します。

コンパイル時にいくつあるかはわかりません。したがって、グローバルな「グリッド」変数のようなものを使用して、関連するデータビューやスリックグリッドを参照することはできません。

2 つの質問があります。ご意見をいただければ幸いです。

私のrowCountChangedハンドラーが呼び出されたとき...

A) どの dataView がイベントを生成したかを知るにはどうすればよいですか?

B)それがわかったら、そのdataViewがどのslickgridに関連付けられているかをどうやって知ることができますか?

4

1 に答える 1

0

A) rowCountChanged dataGrid のコンテキストで呼び出されます。thisコールバックの dataGrid も同様です。または、B) で説明したものと同じクロージャーを使用します。

B)複数のグリッド (ディスプレイ) が同じ dataView にバインドされている場合でも機能するクロージャーを使用します (これは、dataView が特定のグリッドに関連付けられていないためにのみ可能です)。

dataView を使用してグリッドを作成する (または後で割り当てる) 場合は、同じスコープ (grid使用可能なスコープ) で、ヘルパー関数を使用してコールバックをサブスクライブし、グリッドを囲みます。

function watchRowCountChanges(grid, dataView) {
  dataView.onRowCountChanged.subscribe(function (e, args) {
    grid.updateRowCount();   // `grid` is a _local_ variable
    grid.render();

    console.log(grid.name, this === dataView); // true story, use either!
  });
}

// elsewhere...

var grid1 = new Slick.Grid(element1, dataView, columns1, options1);
grid1.name = 'grid1';
watchRowChanges(grid1, dataView);


var grid2 = new Slick.Grid(element2, [], columns2, options2);
grid2.name = 'grid2';
grid2.setData(dataView);
watchRowChanges(grid2, dataView);

行数が変更されると、次のようになります。

grid1 true
grid2 true
于 2014-12-18T06:47:06.943 に答える