2011-01-19 20 views
6

考えるSlickGrid onSelectedRows複数の行が選択されているときに2回起動しますか?

(... this question参照し、バックグラウンドのためthis question):

grid = new Slick.Grid("#myGrid", data, columns, options); 
grid.setSelectionModel(new Slick.RowSelectionModel()); 
grid.onSelectedRowsChanged.subscribe(function() { 
    row_ids = grid.getSelectedRows(); 
    console.log(row_ids); 
}); 

を...私は1つの行を選択した場合(たとえば、行5)、私は

[4] 
の出力を得ます

...これは私が期待するものです。しかし、CMDは+クリックまたはSHIFT +別の行を-ingクリックします(たとえば、行3)この行のほかには、私が期待するものではありません

[2] 
[4, 2] 

の出力を...与えます(私は期待しますちょうど[4, 2])。これは、選択された行の数が> 1である限り発生するようです。私は(たとえば、17行)別の行を選択するために、継続した場合ので、私はこの

[16] 
[4, 2, 16] 

になるだろう、私はconsole.logの文にブレークポイントを追加し、onSelectedRowsChangedは二回発射されていることを確認のための:一度新しくクリックされた行と、選択されたすべての行について1回です。

これはなぜですか?私はそれを解雇したいだけです私に選ばれた行の完全な配列を与える。私はこれをどのように実現するのでしょうか?または私は何かを逃していますか?

+0

あなたはどのバージョンのSlickGridを使用していますか?私は "v2 master"ブランチ(2011年1月中旬)から最新のチェックアウトを使用していますが、この問題は発生しませんでした。 – fbuchinger

+0

私はgithubから直接 "SlickGrid v2.0 alpha"を使用していますページ。私は問題の原因を見つけた...下に投稿... – neezer

+0

私の悪い;上記の質問を更新しました(以下に答えるよりもむしろ)。 – neezer

答えて

3

問題(私が発見した)は、行選択モデルSlick.RowSelectionModel()にあります。

行が選択された場合に具体的に、handleActiveCellChange() AND handleClick()が全て選択された行にそれを前者のみ現在クリックした行にそれを設定しながら、setSelectedRanges()を呼び出し、後者設定するそれぞれ、呼び出されました。

は私がinit()_grid.onActiveCellChangedslick.rowSelectionModel.js内側)ハンドラ内で登録を解除することで、これを固定し、handleClick()内部コール移動:

function init(grid) { 
    _options = $.extend(true, {}, _defaults, options); 
    _grid = grid; 
    // _grid.onActiveCellChanged.subscribe(handleActiveCellChange); 
    _grid.onKeyDown.subscribe(handleKeyDown); 
    _grid.onClick.subscribe(handleClick); 
} 

... 

function handleClick(e, data) { 

    ... 

    if (!e.ctrlKey && !e.shiftKey && !e.metaKey) { 
     handleActiveCellChange(e, data); 
     return false; 
    } 

    ... 

} 

これは「V2マスター」の著者で固定されている場合、私は知りませんが、 @fbuchingerが言ったように、私はこの修正が素早く汚れていることを知っています(これはキーボードのナビゲーションと行間の選択を壊します)。私はキーボードのナビゲーションよりもクリックが適切に機能するように心配しているので、今のところこれに固執しています。

誰かがもっと良い方法を知っていますか?

関連する問題