2013-08-01 45 views
2

當我重新配置其中有rowexpander插件的網格時遇到問題。如果我刪除插件它工作正常。我想下面的修復過,但在腳本塊使用rowexpander插件進行網格重新配置問題extjs 4.21

80070057沒有運氣

Ext.override(Ext.grid.plugin.RowExpander, { 
    beforeReconfigure: function (grid, store, columns, oldStore, oldColumns) {    
       var expander = this.getHeaderConfig(); 
       expander.locked = true; 
       if (columns) 
        columns.unshift(expander); 
      } 
     }); 

這是錯誤的行9988 thown

未處理的異常,列13 - 微軟JScript運行時錯誤:無效的參數。

它是從ExtJS的腳本塊的下方位置拋出

onColumnsChanged: function(headerCt) { 
    var items = this.view.el.query(this.rowBodyTdSelector), 
     colspan = headerCt.getVisibleGridColumns().length, 
     len = items.length, 
     i; 

    for (i = 0; i < len; ++i) { 
     items[i].colSpan = colspan; // **the error thown location is this** 
    } 
}, 

請幫幫忙!提前致謝 !!

回答

3
grid.suspendEvents(); 
grid.reconfigure (store); 
grid.resumeEvents(); 
+0

嘗試提供g也有一點解釋。 –

+0

這對我有用 – Nyagolova

3

這可能有點爲時已晚,但無論如何..

你能確定它只會發生在IE瀏覽器? Mozilla和Chrome似乎沒問題。

顯然IE不喜歡colspan=0,並且在某些時候代碼會嘗試將0賦給項目的colSpan屬性並引發錯誤。

我試過將其更改爲items[i].colSpan = colspan || 1;,問題解決了,但這當然不是解決方案。我試圖檢查這是一個真正的bug還是缺乏知識! :)

編輯:
雖然我找不到任何解決方案,使其工作,我只是重寫方法使用Ext.override並離開它。

EDIT2:
提議ojintoad,你也可以使用類似.setAttribute('colSpan', 1);,從0合併單元格值更改爲1

+1

我不知道它是否是一個更好的解決方案,但setAttribute('colSpan',colspan);爲我工作。我只在IE10中遇到過這種情況,因此只在我的覆蓋中將此應用於該瀏覽器版本。感謝您確認這一點,我在Ext的論壇上沒有看到任何條目。 – ojintoad

+0

我沒有看到任何這方面的參考,所以只需要自己去挖掘它。是的,這將是一個更好的解決方案! –

0

使用下面覆蓋

overrideRowBodyOnColumnChanged: function() { 
     for (var i = 0 ; i < this.features.length; i++) { 
      if (this.features[i].ftype == 'rowbody') { 
       Ext.override(this.features[i], { 
        onColumnsChanged: function (headerCt) { 
         var items = this.view.el.query(this.rowBodyTdSelector), 
          colspan = headerCt.getVisibleGridColumns().length, 
          len = items.length, 
          i; 
         colspan = colspan == 0 ? 1 : colspan; 
         for (i = 0; i < len; ++i) { 
          items[i].colSpan = colspan; 
         } 
        } 
       }); 
       break; 
      } 
     } 
    }, 

並稱之爲網格的initComponent函數中的覆蓋函數

initComponent: function() { 

// your code 

    this.overrideRowBodyOnColumnChanged(); 

}