2015-02-05 40 views
1

我有一個道場一些推廣dgrid與以下聲明完成:如何防止renderHeaderCell()調用時列重新排序由用戶

var myGridTemplate = declare([ OnDemandGrid,ColumnReorder,Keyboard,Selection,selector,Pagination,ColumnResiser]); 

var myGrid = new myGridTemplate(
       { 
        deselectOnRefresh : true, 
        cellNavigation : true, 
        loadingMessage : "Loading data...", 
        noDataMessage : "No data found.", 

       columns : { 

        xyz : { 
          label : Mylabel, 
          width : 50, 
          renderHeaderCell: function(col_node) { 
           col_field = "xyz"; 
           this_filter_col = this; 
            domConstruct.create("div", { 
             innerHTML: this_filter_col.label, 
             intermediateChanges: true 
            }, col_node); 

           . 
           var form = new Form({style: "font-size: 11px"}); 
           . 
           var tc = new TabContainer({ 
           style: "height: 220px; width: 300px;", 
             useMenu : false, 
             useSlider : false, 
             tabStrip : false, 
             tabPosition: "top", 
             doLayout : true 
           }); 
            tc.placeAt(form.domNode); 

            var cp = new ContentPane({ 
             region: "top", 
           style: "padding: 5px; border-bottom: none;" }); 
           . 
           . 

           } 
         . 
         . 
         }); 

在上面的代碼Renderheadcell()方法添加的濾波形式的每個報頭(上面的例子「xyz」),當我點擊標題中的一個按鈕時彈出。 一切工作正常,但是當我做列重新排序renderHeaderCell()塊中存在的窗體(有窗口小部件如文本框,單選按鈕等)被自動重置並重新繪製。 因此,我無法保留所需的形式值,以顯示我已應用於特定列的過濾器。

如何防止renderHeaderCell()列重新排序由用戶完成時調用?

任何解決方案/指針將大大幫助。
謝謝,

回答

1

當列重新排列,這導致renderHeader網格的更新dgrid結構被重新調用,它在renderHeaderCell進而導致被重新調用,以及。

您需要在內部維護您的小部件的狀態並自行恢復它們。如果您使用的是Dijit輸入窗口小部件,那麼您可能需要考慮使用dijit/form/Form而不是直接使用HTML表單元素,因爲您可以通過觀看value來更改狀態並相應地更新狀態信息。

但是,我也會建議您維護對您在標題單元格中創建的任何小部件的引用,並且擴展_destroyColumns以確保在重新呈現標題之前,您創建的所有小部件都已正確銷燬。

+0

謝謝。請建議任何可擴展的方法來保存和恢復每個dgrid列的表單值。因爲我們的應用程序中有很多網格需要維護保存過濾器信息(表單值)。 – mkumar 2015-02-06 05:15:31

相關問題