ExtJS - 为标题添加监听器

时间:2018-04-05 10:51:49

标签: javascript extjs

我有一个小panel titlebody

var dashboardPanel1 = Ext.create('Ext.Panel', {
    renderTo: Ext.getBody(),
    collapsible: true,
    margin: '0 0 50 0',

    layout: {
        type: 'table',
        // The total column count must be specified here
        columns: 3
    },
    defaults: {
        // applied to each contained panel
        bodyStyle: 'padding:20px',
        border: 0
    },

    title: 'Key settings',

    items: [{
        html: '<img src="https://i.imgur.com/n7gOYrE.png" style="width: 20px; height: 20px">',

    }, {
        html: '|Your key is active|',
    }, {
        html: '|Expiring date: 27.04.2018|',
    }],
});

如何将监听器附加到title

因此,当我点击关键设置时,会执行一些操作。

2 个答案:

答案 0 :(得分:3)

您还可以使用[Element.on()](https://docs.sencha.com/extjs/6.2.0/classic/Ext.dom.Element.html#method-on)触发点击事件。

  

on方法是addListener的简写。向此对象追加事件处理程序。

例如:

el.on("click", function(){
  //do something...
  //
}, this);

FIDDLE ,我使用您的代码创建了一个演示并进行了一些修改。我希望这有助于/指导您实现您的要求。

CODE SNIPPET

Ext.application({
    name: 'Fiddle',

    launch: function () {
        Ext.create('Ext.Panel', {

            renderTo: Ext.getBody(),

            collapsible: true,

            margin: '0 0 50 0',

            layout: {
                type: 'table',
                // The total column count must be specified here
                columns: 3
            },
            defaults: {
                // applied to each contained panel
                bodyStyle: 'padding:20px',
                border: 0
            },

            title: '<span class="mytitle">Key settings</span>',

            items: [{
                html: '<img src="https://i.imgur.com/n7gOYrE.png" style="width: 20px; height: 20px">',

            }, {
                html: '|Your key is active|',
            }, {
                html: '|Expiring date: 27.04.2018|',
            }],

            listeners: {
                afterrender: function (panel) {
                    Ext.get(panel.el.query('span.mytitle')[0]).on('click', function (e) {
                        alert(e.target.innerText)
                    }, panel);
                }
            }
        });
    }
});

答案 1 :(得分:2)

<强>解决方案:

替换

title: 'Key settings',

使用自定义标题:

header: {
    title: 'Custom header title',
    listeners: {
        click: function(h, e) {
            var tm = new Ext.util.TextMetrics(h);
            if (e.getX() < tm.getWidth('Custom header title')) {
                Ext.Msg.alert('Information', 'Do some action!');
            }   
        }
    }
}

工作示例:

var dashboardPanel1 = Ext.create('Ext.Panel', {
    renderTo: Ext.getBody(),
    collapsible: true,
    margin: '0 0 50 0',

    layout:
    {
        type: 'table',
        // The total column count must be specified here
        columns: 3
    },
    defaults:
    {
        // applied to each contained panel
        bodyStyle: 'padding:20px',
        border: 0
    },


    //title: 'Key settings',
    header: {
        title: 'Custom header title',
        listeners: {
            click: function(h, e) {
                var tm = new Ext.util.TextMetrics(h);
                if (e.getX() < tm.getWidth('Custom header title')) {
                    Ext.Msg.alert('Information', 'Do some action!');
                }   
            }
        }
    },

    items: [
    {
        html: '<img src="https://i.imgur.com/n7gOYrE.png" style="width: 20px; height: 20px">',

    },
    {
        html: '|Your key is active|',
    },
    {
        html: '|Expiring date: 27.04.2018|',
    }],
});

备注:

使用ExtJS 4.2测试该示例。标题宽度使用Ext.util.TextMetrics计算。