2012-05-17 81 views
1

我正在拖放到一個面板,它在IE8,Chrome和Firefox中工作正常,但對於Ie7我得到這個錯誤 - 「 「offsetWidth」爲空或不是對象」在extjs當dragdrop'offsetWidth'爲空或不是IE7的對象錯誤

當我調試它指向下面的代碼,

getLocation: function (i) { 
     if (!this.isTypeOfDD(i)) 
     { return null } 
     if (i.getRegion) 
     { return i.getRegion() } 
     var g = i.getEl(), m, d, c, o, n, p, a, k, h; 
     try { m = Ext.Element.getXY(g) } 
     catch (j) { } 
     if (!m) { return null } 
     d = m[0]; 
     c = d + g.offsetWidth; 
     o = m[1]; 
     n = o + g.offsetHeight; 
     p = o - i.padding[0]; 
     a = c + i.padding[1]; 
     k = n + i.padding[2]; 
     h = d - i.padding[3]; 
     return new Ext.util.Region(p, a, k, h) 
    } 

具體地g.offsetWidth,其中g是還沒有定義,並且i是類型的「Ext.dd.DropZone」,它有時只發生。我正在努力去解決它。同時,如果有人有一些線索請與我分享。 高級謝謝

+0

你在拖動什麼?使用XTemplate進行數據視圖中的 – Reimius

+0

元素。實際上解決了這個用解決方案更新。 – Jom

回答

1

我通過添加條件檢查解決了這個問題。它到目前爲止工作良好。

getLocation: function (i) { 
    if (!this.isTypeOfDD(i)) 
    { return null } 
    if (i.getRegion) 
    { return i.getRegion() } 
    var g = i.getEl(), m, d, c, o, n, p, a, k, h; 
    if(g!=null){ 
    try { m = Ext.Element.getXY(g) } 
    catch (j) { } 
    if (!m) { return null } 
    d = m[0]; 
    c = d + g.offsetWidth; 
    o = m[1]; 
    n = o + g.offsetHeight; 
    p = o - i.padding[0]; 
    a = c + i.padding[1]; 
    k = n + i.padding[2]; 
    h = d - i.padding[3];  
    return new Ext.util.Region(p, a, k, h) 
    } 
} 
+2

我們最近遇到了類似這樣的問題,修改此方法並不是正確的解決方案,我認爲我會在此分享,因爲真正的問題可能在其他地方。我們遇到的問題是,創建並添加到組中的拖放區或拖動區之一在其創建的組件上未被銷燬。因此,DragDropManager內存中仍有一些區域應該被清除。在某些情況下,當內部刷新緩存完成時,它已經中斷了,因爲這些緩存不再存在。這就像從摧毀羣體中刪除區域一樣簡單。 – spaque99

+0

spaque99釘了它。在elememt渲染中,我創建了dragzone而不會在beforedestroy上銷燬它。這給出了所述的錯誤。在破壞之前破壞元素上的dragzone解決了我的問題 – pexxxy

相關問題