this
Application.EventManager.on('Click', function(args) { // event listener, args is JSON
TestAction.getContents(args.node.id, function(result, e) {
console.log(result);
this.add({
title: args.node.id,
html: result
}).show();
});
});
我真的在使用范围和匿名函数挣扎......我希望this
(在第1行)与this
(在第5行)相同的对象... { {1}}和.call()
似乎是正确的想法,但我不想触发事件......只是改变它的范围......
对于一些上下文...有问题的.apply()
是TabContainer而this
是返回内容的RPC ...
...谢谢
答案 0 :(得分:2)
您需要的是在外部范围内定义的变量,该变量设置为this
:
var that = this;
Application.EventManager.on('Click', function(args) { // event listener, args is JSON
TestAction.getContents(args.node.id, function(result, e) {
console.log(result);
that.add({
title: args.node.id,
html: result
}).show();
});
});
感谢闭包,即使在函数内部也可以这样做(错误)。
答案 1 :(得分:2)
是的,@ Joey的答案确实适用于通用JS代码。但是,由于你根据你的标签使用Ext JS,我将指出正确的方法是在适当的范围内调用事件回调函数,因为Ext处理传递和设置范围您。例如,Ext方式将是(假设您的Application类使用标准的Ext on()
函数):
Application.EventManager.on('Click', function(args) { // event listener, args is JSON
TestAction.getContents(args.node.id, function(result, e) {
console.log(result);
this.add({
title: args.node.id,
html: result
}).show();
});
}, this); // 3rd arg to .on() is scope!