2012-10-23 97 views
1

在使用Ext.selection.CheckboxModel的網格上運行getSelectionModel().clearSelections(),並且使用select頂部的「全選」複選框選擇了所有行列中,「全選」複選框保持選中狀態。如何取消選中Ext.selection.CheckboxModel中的全選複選框

我做了一個骯髒的黑客來解決這個問題,但我想知道是否有一個更清潔的方式,或者如果這是一個錯誤。

回答

6

我會嘗試把一個監聽器網格組件跟蹤選擇更改(不知道這是否會幫助):

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

順便說一句,你有沒有嘗試做getSelectionModel().deselectAll()?在ExtJS 4.1中不推薦使用clearSelections,它在查看而不是選擇模型上運行。

+0

該文檔明確指出clearSelection是一個私有函數,正如您所說,它已在新版本中被棄用。 –

0

編輯: 閱讀維亞切斯拉夫·Voronchuk的回答我沒有回來,驗證文件確實說clearSelection是不發送一個事件,因此不通知複選框應清除私有函數後。

.getSelectionModel().deselectAll() 

確實是要走的路。

由於歷史的原因,我有我原來的骯髒的黑客,我沒有得到解決此問題:

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

的GridColumn-1031是div包裹在我的應用程序複選框的ID。它是隨機生成的,所以你需要檢查你自己做同樣的骯髒的黑客攻擊。

Disclamer!用於你自己的危險。

我不會寬恕這樣的骯髒黑客,因爲它不可能在我的網格自動生成的id更改中生存,但它會在我們等待更持久的解決方案時獲得我的客戶批准的應用程序。

0

對於去除網格頭的選擇:

.getSelectionModel().deselectAll()

,我沒有工作,因爲我的網格已經是空的。

這工作雖然(從上面的黑客):

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

希望這有助於!