Ext.selection.CheckboxModel を使用するグリッドで を実行しgetSelectionModel().clearSelections()
、選択列の上部にある [すべて選択] チェック ボックスを使用してすべての行を選択すると、[すべて選択] チェック ボックスがオンのままになります。
これを回避するために汚いハックを行いましたが、よりクリーンな方法があるかどうか、またはこれがバグであるかどうかを知りたいです。
Ext.selection.CheckboxModel を使用するグリッドで を実行しgetSelectionModel().clearSelections()
、選択列の上部にある [すべて選択] チェック ボックスを使用してすべての行を選択すると、[すべて選択] チェック ボックスがオンのままになります。
これを回避するために汚いハックを行いましたが、よりクリーンな方法があるかどうか、またはこれがバグであるかどうかを知りたいです。
グリッドコンポーネントにリスナーを配置して、選択の変更を追跡しようとします(役立つかどうかはわかりません):
listeners: {
selectionchange: function(grid, selected) {
if(!selected.length) {
grid.getSelectionModel().deselectAll();
}
}
}
ところで、あなたはやろうとしましたgetSelectionModel().deselectAll()
か?clearSelections は ExtJS 4.1 で廃止され、選択モデルではなくビューで実行されます。
グリッド ヘッダーの選択を削除するには:
.getSelectionModel().deselectAll()
私のグリッドはすでに空であるため、うまくいきませんでした。
ただし、これは機能します(上記のハックから):
var selectionHeadID = Ext.getCmp('ingameGrid').headerCt.getHeaderAtIndex(0).getId();
var el = Ext.get(selectionHeadID);
el.removeCls('x-grid-hd-checker-on');
お役に立てれば!
編集: Vyacheslav Voronchuk の回答を読んだ後、私は戻って、ドキュメントが clearSelection がイベントを送信しないプライベート関数であると実際に述べていることを確認したため、チェックボックスをクリアする必要があることを通知しません。
.getSelectionModel().deselectAll()
確かに行く方法です。
歴史的な理由から、この問題を回避するために私が行った元の汚いハックを含めます。
var el = Ext.get("gridcolumn-1031");
el.removeCls('x-grid-hd-checker-on');
gridcolumn-1031 は、アプリのチェックボックスをラップする div の ID です。これはランダムに生成されるため、同じダーティー ハックを行うには、自分自身を検査する必要があります。
免責事項!自己責任で使用してください。
グリッドの自動生成された ID の変更に耐える可能性は低いため、このような汚いハックは容認しませんが、より恒久的な解決策を待つ間、クライアントによってアプリが承認されます。