【问题标题】:RadioButton is not checked when changed更改时未检查 RadioButton
【发布时间】:2020-11-22 14:04:03
【问题描述】:

我正在创建一个包含两个收音机的收音机组; 我在 radiogroup 上设置了一个更改侦听器,一切似乎都工作正常,只是在单击时未检查单选按钮,请参见下面的完整代码:

Ext.define('Mine.view.headerThemeButton', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.headerThemeButton',
    xtype: 'headerThemeButton',
    width: 50,
    height: 58,
    padding: 'auto 0 auto 0',
    bodyStyle: 'border-color: #FFFFFF !important;',
    //id : 'headerThemeButton',
    //height: 20,
    items: [{
        xtype: 'button',
        height: '100%',
         glyph: 'xf142@FontAwesome',
  
        cls: 'headerButtonsCls',
        listeners: {
            click: function(e, target) {
            
                var coords = e.getXY();
                var x = parseInt(coords[0]);
                var y = parseInt(coords[1]);

                 var finalY = y + 50;
                Ext.create('Ext.menu.Menu', {
                    items: [{
                        xtype: 'radiogroup',
                        columns: 1,
                        vertical: true,
                        items: [{
                            //xtype: 'radiofield',
                            boxLabel: 'Dark Mode',
                            name  : 'Mode',
                            //id : 'dmRB',
                            inputValue : 'dm'

                         }, {
                            //xtype: 'radiofield',
                            boxLabel: 'Standard Mode',
                            name  : 'Mode',
                            //id : 'smRB',
                            inputValue : 'sm'

                         }],
                        listeners : {

                             change : function(radio, newValue, oldValue){
                          
                                if (radio.getValue().Mode == 'dm'){

                                    radio.checked = true;
                                     this.onChangeThemeDark();
                                    }
                                else if (radio.getValue().Mode == 'sm'){
                                     radio.checked = true;
 
                                    this.onChangeThemeStandard();
                                    }
                            }
                        }
                    }]
                }).showAt(x, finalY);
            }

        }
    }]
});

我不能在每个收音机上使用 id 道具,因为这会引发重复注册错误。 有什么解决办法吗?

谢谢!

编辑:整个按钮包含在由以下定义的界面中:

Ext.define('Mine.view.newDashboard', {
    extend: 'Ext.container.Viewport',
    alias: 'widget.newDashboard',

    controller: 'newDashboard',
    reference: 'dashboard',
    //overflowY: 'scroll',

    //autoScroll:true,
    layout: {
        type: 'border',
        align: 'stretch '
        //scrollable: true
    },
    /*viewConfig:
    {
        autoScroll: true
    },*/
    //height: 620,

    style: {
        'backgroundColor': '#909090 !important'
    },

    items: [{
            region: 'north',
            html: '',
            border: false,
            collapsible: false,
            margin: '0 0 0 0',
            resizable: false,
            //bodyStyle:'border-bottom-width: 0 !important;',
            layout: {
                type: 'hbox'

                // align: 'stretch'
            },
            items: [{
                    xtype: 'logolink',
                    padding: 'auto 0 auto 0'
                },
                {
                    xtype: 'tbfill'
                },
                {
                    xtype: 'headerThemeButton',
                    width: '100px'
                },...

【问题讨论】:

    标签: extjs extjs5


    【解决方案1】:

    我不确定您到底在问什么,但我认为问题是在选择值后出现菜单时没有选择任何内容。也可能是您无法获取事件中的每个按钮。

    这里有一个小提琴,它展示了如何以两种不同的方式获取事件中的每个按钮。

    此外,每次单击按钮时,您都会创建一个新菜单,因此每次单击按钮时都会显示一组新的单选按钮。我正在按钮上创建一个菜单,然后在单击时显示它。

    您还可以创建一个菜单并将其存储在面板上(或任何地方),如果您不想将其附加到按钮上,则每次都显示该菜单。

    Fiddle radio buttons

    【讨论】:

    • 要让this.onChangeThemeStandard();工作,方法应该在整个接口的控制器中定义吧?
    • 如果您要在事件处理程序中调用该方法,则该方法必须在“this”的范围内。this 的范围是无线电组。在小提琴的情况下,“this”与变量 radio 相同,因此您可以调用 this.themeChange 或 radio.themeChange。我创建了一个方法,我在小提琴中调用,去改变它。请包括您正在使用的 extjs 版本以及工具包,因此 Extjs 7.3.1 Modern 或 6.0 classic。
    • ExtJS 6.2.0
    • 另外...您可以创建一个控制器并将该方法放入控制器中。您可以向控制器添加一个方法。然后您可以将控制器设置为监视事件,然后触发运行该方法的事件.....这对模型视图控制器很有用。那么你的观点中没有任何逻辑......
    • 不,Mine.view.headerThemeButton 包含在使用语法 {xtype : headerThemeButton} 的容器中,主容器绑定到控制器。现在我想要的是在该控制器中定义 onChangeThemeDark() 方法,我的问题是如何从无线电场的侦听器中调用它?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2018-08-20
    • 2013-06-17
    相关资源
    最近更新 更多