1

私の extjs のバージョンは 4.0.2a です。グリッドの垂直スクロールバーが機能しなくなることがあります。よくある問題です。いくつかの解決策を見つけましたが、うまくいきませんでした:

this.Grid.hideVerticalScroller();
this.Grid.initVerticalScroller();
this.Grid.update();
this.Grid.determineScrollbars();
this.Grid.forceComponentLayout();
this.Grid.doComponentLayout();

scroll: false も試しましたが、うまくいかず、ブラウザが応答しなくなりました。extjs グリッド スクロールバーを無効にして、ブラウザの標準スクロールバー (overflow:auto) を追加できると思いますが、方法がわかりません。助言がありますか?


PS 別のバージョンの Extjs を使用することはできません。これは、いくつかのコア ファイルにいくつかの修正が加えられた非常に大きな作業プロジェクトがあるためです。新しいバージョンの Extjs ですべてを機能させるのは非常に困難です。

4

1 に答える 1

3

これが 4.0.7 で使用した「修正」です。4.0.2 で動作する可能性があります。コードは私のものではありません。sencha.com フォーラムから引用しました。

Ext.define('Ext.ux.grid.Panel', {
    extend: 'Ext.grid.Panel',

    initComponent: function() {
        var me = this;

        me.callParent(arguments);

        me.on('scrollershow', function(scroller) {
          if (scroller && scroller.scrollEl) {
            scroller.clearManagedListeners(); 
            scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller); 
          }
        });
    },

    onViewRefresh: function() {
        var me = this;

        try {
            me.callParent();
        }
        catch (e) {};
    }
});

Ext.grid.Panel の代わりに Ext.ux.grid.Panel を使用して、Grid クラスを継承します。問題を完全に解決するわけではありませんが、その特定のバグの可視性を大幅に低下させます。

余談ですが、私の経験では、努力するだけの価値がありました。カスタム修正をコアから削除することから始めます。それらを、コア クラスをオーバーライドする個別のクラスにリファクタリングできます。その後は楽になります。私もそれを経験したことがあります。

于 2012-07-31T18:19:07.310 に答える