1

【解決済み】

UI に 3 つのグリッドがあります。それらをA、B、Cと仮定します

問題は、グリッド間に 2 つのスプリッターを追加したことです。グリッド 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/

4

1 に答える 1

2

私が一緒に働いている人々の助けを借りて、私たちはそれを正しくすることができました. 適切なextjsを実行しないため、jsfiddleで機能しました

これはスプリッターのコード (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();
    }
});
于 2013-04-23T06:03:01.560 に答える