ExtJS 4 callParent无效

时间:2012-02-13 14:28:48

标签: extjs4 extjs-mvc

我想弄清楚为什么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项目

3 个答案:

答案 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');

见:

ExtJS 4 - async callback to callParent throws exception

答案 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!