Javascript 当应用flex时,如何在ExtJS 4中使用grid.columns[index].setWidth(width)调整列的大小?

Javascript 当应用flex时,如何在ExtJS 4中使用grid.columns[index].setWidth(width)调整列的大小?,javascript,extjs,extjs4,extjs4.2,extjs-mvc,Javascript,Extjs,Extjs4,Extjs4.2,Extjs Mvc,强调文本当使用width属性通过Grid.columns[index].setWidth(width)设置panel.Grid中的列宽度时,其工作方式应为。但是当列的宽度由flex设置时,此代码不起作用 只是想说明一下:我正在尝试同步两个网格上的列resize/move/hide/etc事件 因此,两个轴网的柱基本相同: me.columns = { defaults: { renderer: tooltipRenderer },

强调文本当使用
width
属性通过
Grid.columns[index].setWidth(width)
设置
panel.Grid
中的列宽度时,其工作方式应为。但是当列的宽度由
flex
设置时,此代码不起作用

只是想说明一下:我正在尝试同步两个网格上的列resize/move/hide/etc事件

因此,两个轴网的柱基本相同:

me.columns = {
        defaults: {
            renderer: tooltipRenderer
        },
        items: [
            {
                header: "product",
                dataIndex: 'product',
                groupable: false,
                flex: 1
            },                

            {
                header:'Value',
                dataIndex: 'vlue',
                align: 'right',
                renderer: Ext.util.Format.numberRenderer('0,000.00'),
                summaryType: 'remote',
                summaryRenderer: Ext.util.Format.numberRenderer('0,000.00'),
                groupable: false,
                flex: 1
            }
        ]
    };
插件中同步列大小的代码:

firstGrid.on('columnresize', function (ct, column, width) {
        console.log('fgrid: ' + width + ' column name: ' + column.dataIndex);
        secondGrid.columns[column.getIndex()].setWidth(width);
    }, firstGrid);

secondGrid.on('columnresize', function (ct, column, width) {
        console.log('sGrid: ' + width + ' column name: ' + column.dataIndex);
        firstGrid.columns[column.getIndex()].setWidth(width);
    }, secondGrid);
所以,我现在拥有的是:当我在一个网格中用
flex
设置的宽度调整列的大小时,对应于另一个网格的列不会改变它的宽度,但是如果在一个网格中调整列的大小后,我从另一个网格中调整列的大小,一切都会正常工作。
我希望这个描述不要太奇怪。

如果某个内容的宽度由布局管理,则不应该在该内容上设置宽度。如果删除列的
flex
属性,则
setWidth
有效

我的示例切换flex属性,以便您可以设置宽度,尝试单击页面,您将看到flexed列更改宽度

// Assume you have a variable gridwhere the second column is flexed.
Ext.getBody().on('click', function() {
    var emailCol = grid.query('gridcolumn')[1];
    if (emailCol.flex) {
        delete emailCol.flex;
        emailCol.setWidth(100);
    } else {
        emailCol.flex = 1;
        grid.doLayout();
    }              
});

有我们可以玩的代码吗?我可以知道你在问什么,并且有一些想法,但是如果我必须自己编写启动(中断)代码,我就不能花时间。当然可以。我将在五分钟后发布。不幸的是,我必须保存flex状态,因为列的宽度之和必须是常量。因此,我似乎不得不放弃同步列大小调整的想法。@edthehead如果必须保存flex状态,则不能在框布局中组合宽度和flex。您可以尝试计算正确的伸缩量,使其以所需的宽度显示。