예상대로 작동하는 다음 코드가 있습니다.
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 () 함수를 사용할 수 없으며이 코드를 사용할 수 있도록이 코드를 변경할 수있는 방법이 있습니까?
Surya의 대답을 확장하기 this
위해 이벤트 핸들러에는 Ext.Container 인스턴스가 아니라 이벤트가 발생하는 Ext.dom.Element 인스턴스가 있습니다.
대안은 on 메서드를 사용하여 리스너를 추가하여 컨테이너 인스턴스에 핸들러의 범위를 강제 할 수 있도록하는 것입니다.
container.on({
click: {
element: 'el',
fn: function() {
console.log(this.up('panel'));
},
scope: container
}
});
실제 동작을 보여주는이 Fiddle을 살펴보십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다