0

私のアプリケーションでは、多くのウィンドウとパネルがあり、カスタムスクロールバーを使用しています。したがって、ウィンドウまたはパネルごとに、カスタムスクロールバーを取得するためにアフターレイアウトリスナーを指定する必要があります

            listeners:{
    afterlayout: function(c){
    fleXenv.fleXcrollMain(c.body.id);
      }
    }

したがって、私が探しているのは、このコードを一度追加することですべてのウィンドウまたはパネルに影響するように、ウィンドウとパネルに対してこのリスナーをグローバルに追加する必要があるということです。

これを行う方法はありますか

4

3 に答える 3

1

カスタムスクロールバーは、アプリケーションのすべてのWindowsとパネルで使用されているようです。したがって、コアExtJsクラスIMHOを拡張することに何の問題もありません。デフォルトで有効になっている「機能」として実装しますが、スクロールバーが不要なまれなケースでは無効にすることができます。

Ext.define('patch.Ext.panel.Panel-scrollbar', {
    override: 'Ext.panel.Panel',

    enableCustomScrollbar: true,

    afterLayout: function() {
        this.fixScrollbar();
        this.callParent(arguments);
    },

    fixScrollbar: function() {
        if(this.enableCustomScrollbar) {
            // your code
        }
    }
});

アプリケーション定義に依存関係()としてロードExt.require('patch.Ext.panel.Panel-scrollbar')または追加します。requires

Ext.window.Windowから拡張さExt.panel.Panelれるため、動作を継承します。

于 2012-09-18T02:26:58.617 に答える
0

ExtJSのデフォルトコンポーネントを拡張する独自のパネルとウィンドウを作成できます。目的のリスナーを定義し、xtypeを設定してから、これらの変更されたコンポーネントをアプリケーションで使用できます。

別の解決策は、既存のExt.panel.PanelとExt.window.WindowをExt.overrideでオーバーライドすることです。

于 2012-09-17T11:27:22.787 に答える
0

私見、これを行う最善の方法は、個人の Window/Panel クラスを定義することだと思います。はい、1 つの方法は Ext.override 関数を使用することですが、それは良い考えではないと思います。

これを行うことをお勧めします:

Ext.define ('MyCustomWindow', {
  extend: 'Ext.window.Window' ,
  listeners: {
    afterlayout: function (win) {
      fleXenv.fleXcrollMain (win.body.id);
    }
  }
}

Ext.define ('MyCustomPanel', {
  extend: 'Ext.panel.Panel' ,
  listeners: {
    afterlayout: function (panel) {
      fleXenv.fleXcrollMain (panel.body.id);
    }
  }
}

これで、Ext.window.Window と Ext.panel.Panel を変更せずに、MyCustomWindow と MyCustomPanel をインスタンス化できます。

もう 1 つの方法は、WindowManager と PanelManager (これは自分で定義したもの) を使用することです。

Ext.WindowManager.register (window1);
Ext.WindowManager.register (window2);
Ext.WindowManager.register (window3);

Ext.WindowManager.each (function (win) {
  win.on ('afterlayout', function (window) {
    fleXenv.fleXcrollMain (window.body.id);
  });
});

この場合、最初にウィンドウとパネルをインスタンス化し、それらをマネージャーに登録してから、上記の例で行ったように each 関数を呼び出す必要があります。

于 2012-09-17T16:01:55.890 に答える