【问题标题】:Is there a way in Ext JS to tell if a component has a dynamic or static width?Ext JS 中有没有办法判断组件是动态宽度还是静态宽度?
【发布时间】:2018-09-30 05:41:25
【问题描述】:

我正在寻找一种方法来确定 Ext JS 组件是具有动态宽度还是静态宽度。例如,如果文本字段的宽度配置设置为 50,则无论父容器的宽度如何,该配置的静态宽度都会为 50。如果同一个组件的 flex 为 1,则组件的宽度将改为根据父容器的大小调整大小。同时,我知道组件的父容器布局也会影响子组件的宽度。

如何确定组件的宽度是否会随着父容器的大小而改变?

【问题讨论】:

    标签: extjs resize width


    【解决方案1】:

    是的,您可以使用 initialConfig 的 ExtJS 组件。

    initialConfig 对象在组件创建期间传递给构造函数。

    在这个FIDDLE中,我使用windowtextfield 创建了一个演示。我在window 上实现了一个resize 事件并获取组件的动态宽度。我希望这将帮助/指导您实现您的要求。

    代码片段

    Ext.application({
        name: 'Fiddle',
    
        launch: function () {
            Ext.define('DemoModel', {
                extend: 'Ext.app.ViewModel',
                alias: 'viewmodel.demomodel',
                data: {
                    textFieldWidth: null,
                    initialWidth: null
                }
            });
            Ext.create('Ext.window.Window', {
                title: 'DEMO',
                viewModel: {
                    type: 'demomodel'
                },
                width: 400,
                minWidth: 400,
                layout: {
                    type: 'vbox',
                    align: 'stretch'
                },
                bodyPadding: 10,
                items: [{
                    xtype: 'textfield',
                    width: 50,
                    anchor: '100%',
                    emptyText: 'Enter value here...',
                    fieldLabel: 'Demo TEXT'
                }, {
                    xtype: 'displayfield',
                    fieldLabel: 'initial Width',
                    bind: '{initialWidth}'
                }, {
                    xtype: 'displayfield',
                    fieldLabel: 'Dyanamic Width',
                    bind: '{textFieldWidth}'
                }],
                listeners: {
                    resize: function (cmp) {
                        var viewModel = cmp.getViewModel(),
                            textfield = cmp.down('textfield');
                        viewModel.set({
                            textFieldWidth: textfield.getWidth(),
                            initialWidth: textfield.initialConfig.width
                        });
                    }
                }
            }).show();
        }
    });
    

    【讨论】:

    • 啊,所以您是说获取宽度的初始值并与当前现有宽度进行比较?然后,如果它们相同,则意味着宽度是静态的。关于这种策略,我想知道如何处理一种情况。在您的示例中,假设窗口的宽度为 100,具有 hbox 布局。并且,假设文本字段的 flex 为 2,每个显示字段的 flex 为 1(这意味着文本字段占用了窗口 100 个像素中的 50 个)。我如何判断文本字段是否具有动态宽度,因为 inititalConfig 宽度将等于当前宽度?
    • 你说的是静态宽度而不是弹性。每当您设置 flex 时,它都会根据屏幕宽度自动调整宽度。你能用一个例子简单解释一下你想要什么吗?
    • 请访问以下小提琴:fiddle.sencha.com/#view/editor&fiddle/2fsf 在示例中,设置了 flex 和 width。 Flex 最终决定了 field1 的宽度。根据我们一直在讨论的策略,我假设我可以通过比较原始宽度和当前宽度来判断组件的宽度是否不变。但是,当当前宽度等于原始宽度时,如何判断组件宽度是否不变,就像示例中的情况一样?
    • 所以你可以设置minWidth:300 这样宽度不会改变
    • 感谢您的反馈。我不是试图设置最小宽度,而是想弄清楚如何确定组件的宽度是否会随着组件的父容器大小的调整而改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2022-07-27
    相关资源
    最近更新 更多