이벤트 처리기는 일반적으로 다른 범위 (this
값)에서 호출됩니다.
var getUrl = 'test'; // now it's just a regular variable
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(getUrl); // still available - lexical scope!
},
}
)
)
을 당신이 정말로 이벤트 핸들러에서 this
으로 사용할 수있는 부모 개체를 원하는 경우에, 당신이 Ext.Function.bind
을 사용할 수 있습니다 또는 : 당신이 원하는 모든 핸들러에서 단일 값 인 경우, 어휘 범위 지정 갈 수있는 가장 쉬운 방법은 범위를 수정
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: Ext.Function.bind(function(checkbox, checked) {
alert(this.getUrl);
}, this), // second arg tells bind what to use for 'this'
}
)
)
업데이트 : Ext.Function.bind
는 ExtJS로 4 기능입니다. 당신의 ExtJS 3.x 또는 아래에 있다면, 당신은 같은 말에 Function.createDelegate
를 사용할 수 있습니다
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
}.createDelegate(this)
}
)
)
출처
2011-05-11 18:17:26
wes
@Abdel : 왜이 질문에서 extjs4 태그를 제거 했습니까? 그가 버전 4를 사용 중이라면'Ext.Function.bind'를 사용해야하지만 3 살 이하라면 함수 범위를 변경하기 위해'Function.createDelegate'를 사용해야합니다. 이 경우 버전이 중요합니다. – wes
@wes, 내가 틀렸다면 정정해라. extjs4의 체크 박스에'check' 이벤트가 없다. –
매우 지각 적입니다! 나는 그것을 놓쳤다. 또한 v4를 사용 중이면 Ext.form.field.Checkbox가됩니다. 나는 내 대답을 업데이트 할 것이다 :) – wes