1

Ext.selection.CheckboxModel を使用するグリッドで を実行しgetSelectionModel().clearSelections()、選択列の上部にある [すべて選択] チェック ボックスを使用してすべての行を選択すると、[すべて選択] チェック ボックスがオンのままになります。

これを回避するために汚いハックを行いましたが、よりクリーンな方法があるかどうか、またはこれがバグであるかどうかを知りたいです。

4

3 に答える 3

6

グリッドコンポーネントにリスナーを配置して、選択の変更を追跡しようとします(役立つかどうかはわかりません):

listeners: {
   selectionchange: function(grid, selected) {
        if(!selected.length) {
            grid.getSelectionModel().deselectAll();
        }
   }
}

ところで、あなたはやろうとしましたgetSelectionModel().deselectAll()か?clearSelections は ExtJS 4.1 で廃止され、選択モデルではなくビューで実行されます。

于 2012-10-25T00:00:55.400 に答える
0

グリッド ヘッダーの選択を削除するには:

.getSelectionModel().deselectAll()

私のグリッドはすでに空であるため、うまくいきませんでした。

ただし、これは機能します(上記のハックから):

var selectionHeadID = Ext.getCmp('ingameGrid').headerCt.getHeaderAtIndex(0).getId();
var el = Ext.get(selectionHeadID);
el.removeCls('x-grid-hd-checker-on');

お役に立てれば!

于 2013-02-04T23:11:54.690 に答える
0

編集: Vyacheslav Voronchuk の回答を読んだ後、私は戻って、ドキュメントが clearSelection がイベントを送信しないプライベート関数であると実際に述べていることを確認したため、チェックボックスをクリアする必要があることを通知しません。

.getSelectionModel().deselectAll()

確かに行く方法です。

歴史的な理由から、この問題を回避するために私が行った元の汚いハックを含めます。

var el = Ext.get("gridcolumn-1031");
el.removeCls('x-grid-hd-checker-on');

gridcolumn-1031 は、アプリのチェックボックスをラップする div の ID です。これはランダムに生成されるため、同じダーティー ハックを行うには、自分自身を検査する必要があります。

免責事項!自己責任で使用してください。

グリッドの自動生成された ID の変更に耐える可能性は低いため、このような汚いハックは容認しませんが、より恒久的な解決策を待つ間、クライアントによってアプリが承認されます。

于 2012-10-23T14:39:10.687 に答える