如何使用setActiveItem进行卡片布局以显示基于radiobuttton选择的面板?

时间:2017-12-27 19:34:42

标签: javascript extjs

var radioGroup = {
    xtype: 'radiogroup',
    itemId: 'radioButton',
    layout: 'hbox',
    width: 700,
    defaults: {
        flex: 1
    },
    items: [{
        boxLabel: option1
        name: 'timeInterval',
        inputValue:0
        checked: true
    }, {
        boxLabel: option2
        name: 'timeInterval',
        inputValue:1,
        checked: false

    }, {

        boxLabel: option1
        name: 'timeInterval',
        inputValue:2,
        checked: false

    }],
    listeners: {
        change: function (radio, newValue, oldValue) {

           if (radio.getValue().timeInterval == 2) {

             cardPanel.layout.setActiveItem(0);
//getting error cardPanel.layout.setActiveItem is not a function
                                 } else if (radio.getValue().timeInterval == 0) {

             cardPanel.layout.setActiveItem(1);
                                 } else if (radio.getValue().timeInterval == O1) {

             cardPanel.layout.setActiveItem(2);
                                 }
        }
    }
};

var cardPanel = {
  layout: 'card',
    itemId: 'PanelID',
    activeItem: 0,
    items: [{
      itemId: 'timeIntervalPanel',
        name: 'timeInterval',
        xtype: 'timeintervalpanel',
        selection: this.defaultData,
        dateFormat: this.dateFormat,
        timeFormat: this.timeFormat
    }, {
        id: 'specificIntervalPanel',
        name: 'timeInterval',
        xtype: 'specificinterval',
        selection: this.defaultData
    }, {
        itemId: 'emptyPanel',
        name: 'emptyCard',
        xtype: 'panel'
    }]
};

1 个答案:

答案 0 :(得分:0)

您需要使用以下步骤: -

  • 首先,您需要在[{3}} change事件中获取您提供的layout:"card"组件。
  • 现在,您需要获得组件的RadioGroup
  • 现在需要使用card布局组件的getLayout()方法。

setActiveItem(newItem) 中,我使用您的代码创建了一个演示并进行了一些修改。我希望这会对你有所帮助。

代码段

//Timeinterval panel
Ext.define('Timeintervalpanel', {
    extend: 'Ext.panel.Panel',
    xtype: 'timeintervalpanel',
    html: 'This is timeintervalpanel'
});

//Specific Interval panel
Ext.define('SpecificInterval', {
    extend: 'Ext.panel.Panel',
    xtype: 'specificinterval',
    html: 'This is specificinterval'
});

//Empty Panel
Ext.define('EmptyPanel', {
    extend: 'Ext.panel.Panel',
    xtype: 'emptyPanel',
    html: 'This is emptyPanel'
});

//Panel with radio button and card item.
Ext.create('Ext.panel.Panel', {
    title: 'Card Layout Example with radio buttons',
    renderTo: Ext.getBody(),
    height: window.innerHeight,
    layout: 'vbox',
    tbar: [{
        xtype: 'radiogroup',
        itemId: 'radioButton',
        layout: 'hbox',
        defaults: {
            flex: 1,
            margin: 5,
            name: 'timeInterval'
        },
        items: [{
            boxLabel: 'Timeinterval panel',
            inputValue: 0,
            checked: true
        }, {
            boxLabel: 'Specific Interval',
            inputValue: 1
        }, {
            boxLabel: 'Empty Panel',
            inputValue: 2
        }],
        listeners: {
            change: function (radio, newValue, oldValue) {
                var cardPanel = radio.up('panel').down('#PanelID').getLayout();

                cardPanel.setActiveItem(newValue.timeInterval);

                //Only just for animation
                //activeItem.getEl().slideIn('r');
            }
        }
    }],
    items: [{
        //This panel have provided card layout.
        xtype: 'panel',
        flex: 1,
        width: '100%',
        layout: 'card',
        itemId: 'PanelID',
        defaults: {
            bodyPadding: 20
        },
        items: [{
            xtype: 'timeintervalpanel'
        }, {
            xtype: 'specificinterval'
        }, {
            xtype: 'emptyPanel'
        }]
    }]
});