Ext.grid.Panel
은 reconfigure()
메서드가 호출 될 때마다 발생하는 '다시 구성'이벤트를 제공합니다. 그러나 현재 ExtJs 4.1 릴리스에서 RowEditing 플러그인은이 이벤트에 연결하지 않습니다!
우리는 우리 자신의 무거운 짐을해야 할 것 같습니다. 최종 솔루션에 도달하는 데 몇 시간이 걸렸지 만 최종 솔루션은 다소 간단합니다.
RowEditing 플러그인은 RowEditor 구성 요소의 인스턴스를 만듭니다 (이 두 인스턴스는 별개의 이름이지만 비슷한 이름이지만 다른 구성 요소로 유지하십시오!). RowEditing 플러그인은 행 편집기 등을 보여줄 때를 알기 위해 필요한 이벤트에 그리드를 연결하는 것입니다. RowEditor는 그리드의 인라인 편집을 위해 행 위에 팝업되는 비주얼 컴포넌트입니다.
은 첫째 나는 다시 구성 아마 행 편집기에게 12 개의 다른 방법을 시도했다. 내부 메서드, init 메서드, 메서드 크기 조정 등을 호출 해 보았습니다. 그런 다음 아키텍처에 대한 좋은 점을 발견했습니다. 필요한 경우 행 편집기와 지연로드를 가져 오는 메소드가있는 RowEditor 인스턴스에 대한 단일 내부 참조가 있습니다. 그게 핵심 이었어!
RowEditing 플러그인을 파괴하지 않고 RowEditor를 삭제할 수 있습니다 (플러그인을 동적으로로드/언로드 할 수 없음). 그런 다음 RowEditor를 다시 만들 수 있습니다.
Ext 그리드 용 편집 플러그인은 각 열에 올바른 편집기 유형을 가져 오거나 설정하는 데 사용되는 getEditor()
및 setEditor()
에 대한 각 열에 일부 확장 방법을 추가합니다. 그리드를 다시 구성하면 적용된 확장 메소드가 '사라짐'(해당 메소드가 적용되지 않은 새로운 컬럼이 있음). 따라서 플러그인에서 initFieldAccessors()
메서드를 호출하여 이러한 접근 자 메서드를 다시 적용해야합니다.
/**
* @event reconfigure
* Fires after a reconfigure.
* @param {Ext.grid.Panel} this
* @param {Ext.data.Store} store The store that was passed to the {@link #method-reconfigure} method
* @param {Object[]} columns The column configs that were passed to the {@link #method-reconfigure} method
*/
onReconfigure: function (grid, store, columnConfigs) {
var columns = grid.headerCt.getGridColumns(),
rowEditingPlugin = grid.getPlugin('rowEditor');
//
// Re-attached the 'getField' and 'setField' extension methods to each column
//
rowEditingPlugin.initFieldAccessors(columns);
//
// Re-create the actual editor (the UI component within the 'RowEditing' plugin itself)
//
// 1. Destroy and make sure we aren't holding a reference to it.
//
Ext.destroy(rowEditingPlugin.editor);
rowEditingPlugin.editor = null;
//
// 2. This method has some lazy load logic built into it and will initialize a new row editor.
//
rowEditingPlugin.getEditor();
}
가 나는 설정 리스너를 사용하여 내 그리드 패널이 부착 :
listeners: {
'reconfigure': Ext.bind(this.onReconfigure, this)
}
"나"로 정의 된 것은 무엇입니까? 네가 어딘가에 '나 =이'가 있다고 상상해? –
@AramKocharyan 네, 죄송합니다. 많은 루틴을 시작할 때, 특히 clos 내부에서'this '의 의미를 명확히하기 위해'var me = this;'줄을 사용합니다. 이 선은 특히 나와이 둘을 모두 사용함에 따라 나쁩니다! 이 게시물의 목적으로 만 'this'를 사용하도록 답변을 편집합니다. – BenSwayne
감사! 그것도 제가 시도한 것이지만,'listeners'와 같은 객체에서'onReconfigure'를 정의하고 있기 때문에, 그 단계에서는 사용할 수 없습니다. 이 두 속성은 서브 클래스와 같이 다른 장소에 있습니까? –