2017-02-06 1 views
1

ExtJs 6.2には、bug described here in the Sencha Forumがあります。ExtJs 6.2では、項目を含む列はflexプロパティを考慮しませんが、回避策はありますか?

6.2+ Ext.grid.Panelは列項目を使用するときにflexを無視するため、

問題を再現する手順:6.2+とフィドルのグリッドを作成してアイテムやフレックスなし 列を追加:フィドルで1 klick実行し、それだけで 罰金はフレックスで列に項目を追加になります:1 klickが再び実行フィドルで フレックスは無視されます!

予想された結果:私は、列のたわみが予想されます。

代わりに発生する結果:列は、最小で サイズでレンダリングされます。

このスレッドでは夜間のビルドで修正されていますが、ExtJs 6.2.1はまだGPLバージョンでは使用できません。この問題の回避策はありますか?

誰かがバグ修正を使って上書きを公開することは可能でしょうか?

編集:追加の洞察

列と私はバグがafterrenderイベント(column.flex = 1)とafterlayoutイベント(column.flex = null)の間で起こっていることを主張することができ、グリッドにバインドされたイベントを見てみます。私はExtJのレイアウトの詳細をほとんど知らないので、問題のコードがどこに位置するかをさらに絞り込む方法についてのアイデアは不十分です。誰かが完全な答えの代わりにこの方向にヒントを与えることができれば、彼らも歓迎されます。

答えて

1

グリッドが配置されたら列のサイズを変更するための回避策として見つかりました。これは必要に応じて動作します。

唯一の欠点は、列を2度並べることです。

Ext.define('App.override.grid.Panel', { 
    override: 'Ext.grid.Panel', 
    initComponent: function() { 
     this.callParent(arguments); 
     this.on('afterlayout', this.resizeColumns); 
    }, 
    resizeColumns: function() { 
     var me = this, 
      width = this.getWidth(), 
      flex = 0; 
     Ext.batchLayouts(function(){ 
      me.columns.each(function (col) { 
       if (col.config.flex) flex += col.config.flex 
       else if (col.config.width) width -= col.config.width 
       else width -= col.getWidth() 
      }) 
      if (flex) { 
       me.columns.each(function (col) { 
        if (col.config.flex) { 
         newWidth = Math.round(width * col.config.flex/flex) 
         if (col.getWidth() != newWidth) col.setWidth(newWidth) 
        } 
       }) 
      } 
     }) 
    } 
}) 

問題:この方法で幅を設定した列は、もはやユーザーのサイズ変更ができなくなりました。

関連する問題