向上函数在元素的事件处理程序中不起作用
Up function not working in event handler on element
下面的代码可以正常工作:
var container = Ext.create('Ext.Container', {
html: 'Click Me!',
listeners: {
click: {
element: 'el',
fn: function() {
Ext.Msg.alert('Test', 'It was clicked!');
}
}
}
});
Ext.create('Ext.panel.Panel', {
itemId: 'mainContainer',
renderTo: Ext.getBody(),
border: false,
layout: {
type: 'vbox',
align: 'stretch'
},
items: [container]
});
在这个例子中,我只是提醒一些无意义的消息,但我实际上想使用 'up()' 方法获取父容器的 itemId,但是它并没有像我预期的那样工作。例如,如果我将点击处理程序更改为:
click: {
element: 'el',
fn: function() {
console.log(this.up('panel'));
}
}
然后 'null' 被记录。为什么我不能在这里使用 up() 函数,有没有办法更改此代码以便我可以使用它?
up 在元素级别触发事件时不可用。尝试使用 Ext.ComponentQuery.query('#mainContainer')[0]
访问面板
为了扩展 Surya 的回答,事件处理程序中的 this
是引发事件的 Ext.dom.Element 实例,而不是 Ext.Container 实例。
另一种方法是使用 on 方法添加侦听器,这样您就可以将处理程序的范围强制到容器实例。
container.on({
click: {
element: 'el',
fn: function() {
console.log(this.up('panel'));
},
scope: container
}
});
看看这个 Fiddle 的实际效果:
下面的代码可以正常工作:
var container = Ext.create('Ext.Container', {
html: 'Click Me!',
listeners: {
click: {
element: 'el',
fn: function() {
Ext.Msg.alert('Test', 'It was clicked!');
}
}
}
});
Ext.create('Ext.panel.Panel', {
itemId: 'mainContainer',
renderTo: Ext.getBody(),
border: false,
layout: {
type: 'vbox',
align: 'stretch'
},
items: [container]
});
在这个例子中,我只是提醒一些无意义的消息,但我实际上想使用 'up()' 方法获取父容器的 itemId,但是它并没有像我预期的那样工作。例如,如果我将点击处理程序更改为:
click: {
element: 'el',
fn: function() {
console.log(this.up('panel'));
}
}
然后 'null' 被记录。为什么我不能在这里使用 up() 函数,有没有办法更改此代码以便我可以使用它?
up 在元素级别触发事件时不可用。尝试使用 Ext.ComponentQuery.query('#mainContainer')[0]
访问面板
为了扩展 Surya 的回答,事件处理程序中的 this
是引发事件的 Ext.dom.Element 实例,而不是 Ext.Container 实例。
另一种方法是使用 on 方法添加侦听器,这样您就可以将处理程序的范围强制到容器实例。
container.on({
click: {
element: 'el',
fn: function() {
console.log(this.up('panel'));
},
scope: container
}
});
看看这个 Fiddle 的实际效果: