2014-07-08 2 views
-1

ExtJS 애플리케이션에 레거시 자바 스크립트 코드를 임베드해야합니다. 우리의 응용 프로그램은 ExtJS 대화 상자를 사용하여 이전의 javasccript 양식을 표시합니다 (최종적으로 ExtJS에서 다시 처리하기 전에).ExtJS의 패널에 DOM 노드를 추가하는 방법

내가 Ext.Panel에 DOM 노드를 추가하는 것을 시도하고있다 (또는 그 문제에 대한 Ext.window.Window). 가능한지 또는 어떤 방법이 있는지 확실하지 않습니다. 나는 어떤 종류의 방법을 아래와 같이에 appendChild 필요

var mainPanel = document.create('div'); 

mainPanel.appendChild(getVeryComplicatedLegacyHTML()) 


var p = new Ext.Panel({ 
    title: 'another panel', 
    titleCollapse: true 
}); 

p.appendChild(mainPanel); //??? 

이는 ExtJS에 모든 수 있습니까?

답변

1

ExtJS에서 가능한가요?

은 내선에서 appendChild 방법이없는 평범한 구식 HTML과 CSS

Ext.panel.Panel (모든 내선 구성 요소와 그 자손)를 커버 ... 여기에 마법이 없다. Ext.dom.Element DOMElement 래퍼가 appendChild method이고 모든 구성 요소의 요소 참조가 el/getEl()입니다.

간단한 예를 들어, 레거시 html로 패널에 보조 구성 요소를 만듭니다. 패널이어서 렌더링 될 때 는 레거시 HTML합니다 (this.el.update()element method inside 사용) update() 방법을 사용하여, 구성 요소의 내부에 주입된다

var p = new Ext.Panel({ 
    title: 'another panel', 
    titleCollapse: true, 
    items: [ 
    { 
     xtype: 'box', 
     itemId: 'fake-cmp' 
    }], 
    listeners: { 
     boxready: function(panel) { 
      var fakeCmp = panel.down('#fake-cmp'); 
      fakeCmp.update(getVeryComplicatedLegacyHTML()); 
     } 
    } 
});  

ExtJS

+0

당신 넷째 줄에 fakeComponnet.el는 정의되지 않는다. 이 구성 요소는 DOM 객체를 포함하기 전에 어딘가에 추가되거나 먼저 렌더링되어야합니까? –

+1

예, 답변을 업데이트했습니다 (패널이 렌더링 될 때 가짜 구성 요소가 기존 html로 업데이트 됨). 구성 요소가 렌더링 될 때'el'을 사용하여 추가/업데이트 등을 할 수 있습니다. – babinik

+0

fakeCmp.update (document.createElement ('div')); 그것은 렌더링하지 않습니다. 그냥 패널 안의 문자열 [object HTMLDivElement]을 출력합니다. –