ExtJS 4 callParent не работает - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь выяснить, почему не работает 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');
        }
    });
}
});

Ошибка: Uncaught TypeError: Невозможно прочитать свойство 'суперкласс' из неопределенного

Мне нужно загрузить элементы Windows через AJAX

Ответы [ 3 ]

2 голосов
/ 17 июля 2012

Мне нужно было передать обратный вызов с 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 голос
/ 05 мая 2013

Немного поздно, но надеюсь, что это поможет другим ...

Вместо звонка 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 - асинхронный обратный вызов для исключения CallParent

0 голосов
/ 14 февраля 2012

Привет, Джулиан!

Мне нужно было сделать аналогичную операцию, и я закончил оборачивать запрос ajax в функцию, которую я передаю в нее функцию обратного вызова для выполнения, когда запрос выполнен, и изперезвоните я запускаю окна.

С точки зрения кода, это будет что-то вроде:

//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 позволяет, скажем, по нажатию кнопки:

        {
                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
                        });

                    });
                }
            }

НТН!

...