2

に処理する前にいくつかの Json Store を準備したいのですcallParent()が、エラーがスローされます。

ただし、me.callParent()非同期コールバックなしで外部で正常に動作します。

Ext.define('My.desktop.AppExt', {
    extend: 'Ext.ux.desktop.App',

    someStore: null,

    init: function() {
        var me = this;
        me.someStore = Ext.create('My.store.SomeStore');
        me.someStore.load({
            scope: this,
            url: 'some/json/url',
            callback: function(records, opt, success) {
                 if (success) {
                     me.callParent(); // BOOM! ERROR HERE
                 }
            }
        });
    }
});

エラー:

//localhost/js/ext-all-debug.js の 4245 行目、17 列目の処理されない例外

0x800a138f - JavaScript ランタイム エラー:

未定義または null 参照のプロパティ 'スーパークラス' を取得できません

4

3 に答える 3

0

私が知っている方法の 1 つは、追加のパラメーターを使用することです。これは、親メソッドを呼び出す必要があることを示します。

init: function(callParent) {
    if (callParent) {
        this.callParent();
    }
    var me = this;
    me.someStore = Ext.create('My.store.SomeStore');
    me.someStore.load({
        scope: this,
        url: 'some/json/url',
        callback: function(records, opt, success) {
             if (success) {
                 this.init(true);
             }
        }
    });
}

this.self.superclass.init.call(this) を使用すると、誰かがクラスの子を作成するまで問題ありません。this.self.superclass はインスタンスのクラスのスーパークラスを指すため、Ext.ux.desktop.App ではなく My.desktop.AppExt を指します。

2016 年 8 月 24 日更新: よりスマートなソリューションを公開しました (別の回答を参照してください)。

于 2016-01-28T15:54:23.173 に答える