2017-02-06 15 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) 사이에 무슨 일이 일어나고 있음을 주장 할 수있는 그리드에 바인딩 이벤트를 찾고 있습니다. ExtJs의 레이아웃 실행 세부 사항에 대해서는 잘 모릅니다. 따라서 문제가되는 코드가 어디에 배치 될지 자세히 결정하는 방법에 대한 아이디어가 부족합니다. 누구든지 완전한 대답 대신이 방향으로 힌트를 줄 수 있다면 환영받을 수도 있습니다.

답변

1

그리드가 배치 된 후에는 열의 크기를 조정할 수있는 해결 방법으로 발견되었습니다. 이것은 정상적으로 작동합니다.

유일한 단점은 열을 두 번 배치한다는 것입니다.

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

문제점 :이 방법으로 너비를 설정 한 열은 더 이상 사용자가 크기를 조정할 수 없습니다.