我想弄清楚为什么callParent无法正常工作。
以下是一些代码:
Ext.define('AM.ArView', {
extend:'Ext.window.Window',
initComponent: function() {
var foo = this;
console.log(foo);
Ext.Ajax.request({
url: 'http://my/awesome/path',
success: function(response, opts) {
console.log(foo);
foo.callParent();
},
failure: function(response, opts) {
console.log('error');
}
});
}
});
错误: 未捕获的TypeError:无法读取未定义的属性“超类”
我需要通过ajax加载Windows项目
答案 0 :(得分:2)
我需要将callParent
的回调传递到Ext.Msg.*
对话框。老实说,我不明白如何使用代码回答我的案例......并用黑客解决了它。
使用4.0.7:
methodName: function () {
var me = this,
args = arguments;
// do some stuff
function customCallback() {
// do some stuff inside callback
// hacks for calling parent method from callback
var caller = arguments.callee.caller;
caller.$owner = me;
caller.$name = 'methodName';
me.callParent(args);
}
// do more stuff, pass callback anywhere
}
答案 1 :(得分:1)
有点晚了,但希望它有助于其他人......
而不是调用this.callParent();
您需要致电this.self.superclass.foo.call(this);
foo是你想要调用的超类方法。
把它包起来让它看起来更有意义:
callParentManually: function (myscope, methodname) {
myscope.self.superclass[methodname].call(myscope);
}
//and then ...
callParentManually(me, 'initComponent');
见:
答案 2 :(得分:0)
Hei Julian!
我需要做类似的操作,最后我在一个函数中包装ajax请求,我将一个回调函数传递给它,以便在请求完成时执行,并且从回调中我启动windows。
就代码而言,它将类似于:
//Request function
LoadThoseDamnWindows: function (callback)
{
Ext.Ajax.request({
url: 'checklist/GetList',
success: function(response, opts) {
console.log(response);
callback.call(this, response);
},
failure: function(response, opts) {
console.log('error');
}
});
}
然后你调用int let,比如ona按钮点击:
{
xtype: 'button',
text: 'Help',
iconCls: 'help',
scope: this,
handler: function(){
//Call function
this.LoadThoseDamnWindows(function(loadedData){
Ext.create('Ext.window.Window',{
autoShow: true,
layout: 'fit',
title: "My Cool window",
html: "My window content with dynamic loaded data" + loadedData.responseText
});
});
}
}
HTH!