2013-04-22 19 views
1

[解決]電網分離器沒有調整中間格ExtJS的

我有我的UI三個光柵。假設它們是A,B,C

問題是我在網格之間添加了兩個分離器。 我的網格A和C調整大小,但網格B是固定的。

-------------------------- 
      A 
    --------------------------- 
      B 
    ---------------------------- 
      C 




-------------------------------- 
      A 



--------------------------------- 
      B 
--------------------------------- 


      C 
--------------------------------- 

我不知道怎麼寫了代碼解釋:P

代碼:

layout:{ 
     type:'vbox', 
     align:'stretch', 
     pack:'start', 
     split:true, 
     collapsible:true 
    }, 
    items:[{ 
     xtype:'panel', 
     layout:'fit', 
     minHeight:200, 
     flex:0.3, 
     items:[{ 
      // add some grid or panel 
     }] 
     }, 
     { 
     xtype:'splitter', 
     }, 
     { 
     xtype:'panel', 
     layout:'fit', 
     flex:0.3, 
     minHeight:200, 
     items:[{ 
      // add some grid or panel 
     }] 
     }, 
     { 
     xtype:'splitter', 
     }, 
     { 
     xtype:'panel', 
     layout:'fit', 
     flex:0.3, 
     minHeight:200, 
      items:[{ 
      // add some grid or panel 
     }] 
     }] 

http://jsfiddle.net/8Zesp/178/

+0

您需要提供一些代碼 – 2013-04-22 07:31:56

+0

我不是如何解釋這個問題很清楚。 – user2803 2013-04-22 09:40:31

+0

對於一切工作正常。網格調整大小。你想要中間網格做什麼? – Patrick 2013-04-22 11:21:39

回答

2

有了一點幫助,從我與我們的工作人員都能夠得到它的權利。 它的工作的jsfiddle,因爲它不運行適當的ExtJS

它是在分離器的代碼(SplitterTracker)一個錯誤,它可以固定使用一個代理 有一個「的getWidth()」硬編碼不管實際的分配器正在移動。

我希望這可以幫助別人

Ext.override(Ext.resizer.SplitterTracker, { 
    // Performs the actual resizing of the previous and next components 
    performResize: function(e, offset) { 
     var me  = this, 
      splitter = me.getSplitter(), 
      orient = splitter.orientation, 
      prevCmp = me.getPrevCmp(), 
      nextCmp = me.getNextCmp(), 
      owner  = splitter.ownerCt, 
      flexedSiblings = owner.query('>[flex]'), 
      len  = flexedSiblings.length, 
      i   = 0, 
      dimension, 
      size, 
      totalFlex = 0; 

     // BUGFIX here: 
     var getSizeFunc = (orient === 'vertical') ? 'getWidth' : 'getHeight'; 

     // Convert flexes to pixel values proportional to the total pixel width of all flexes. 
     for (; i < len; i++) { 
      size = flexedSiblings[i][getSizeFunc](); 
      totalFlex += size; 
      flexedSiblings[i].flex = size; 
     } 

     offset = offset || me.getOffset('dragTarget'); 

     if (orient === 'vertical') { 
      offset = offset[0]; 
      dimension = 'width'; 
     } else { 
      dimension = 'height'; 
      offset = offset[1]; 
     } 
     if (prevCmp) { 
      size = me.prevBox[dimension] + offset; 
      if (prevCmp.flex) { 
       prevCmp.flex = size; 
      } else { 
       prevCmp[dimension] = size; 
      } 
     } 
     if (nextCmp) { 
      size = me.nextBox[dimension] - offset; 
      if (nextCmp.flex) { 
       nextCmp.flex = size; 
      } else { 
       nextCmp[dimension] = size; 
      } 
     } 

     owner.updateLayout(); 
    } 
});