我正在尝试实现这样的目标(http://docs.sencha.com/ext-js/4-1/#!/example/portal/portal.html),但我希望Portlet的大小可以调整。

所以我有一个带有Ext.layout.ColumnLayout布局的Ext.TabPanel。
所有项目都是面板(Ext.form.Panel)具有:

resizable : true,
draggable:true,


具体来说,假设初始情况如下



我希望能够将突出显示的portlet拖动到新位置,并让其他portlet“为其腾出空间”。不幸的是,我现在得到的是



即两个portlet重叠。我想得到这个代替(不重叠):



所以问题是:是否有一种方法可以在不要求列大小固定的情况下实现这一目标?

谢谢。

最佳答案

真的很简单。
您所需要做的就是处理移动事件,例如在自定义面板的控制器中:

 move:function( thi, x, y, eOpts ){
    if(x!=0 && y!=0)
    {
        var cont = thi.getBubbleParent();
        var xNew = thi.getPosition()[0];
        var yNew = thi.getPosition()[1];

        var ind = 0;
        while(cont.items.items[ind].getBox().y+cont.items.items[ind].getBox().height < yNew)
        {
            ind++;
        }
        while(cont.items.items[ind].getBox().x+cont.items.items[ind].getBox().width < xNew)
        {
            ind++;
        }
        thi.setPagePosition([(xNew-x),(yNew-y)]);
        cont.insert(ind,thi);
    }
}


其他所有面板的位置都是通过您的列布局自动管理的。

关于javascript - ExtJS列布局,移动可调整大小的面板而不会重叠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15068399/

10-13 06:54