2010-11-30 2 views
0

나는 (JQuery와 AJAX를 통해) 회전로드 다른이 함수와 그것의 내부 뷰에 하나 개의보기에서의 ExtJS 객체를 구축하는 Kohana 프레임 워크가 :JQuery가 ExtJS가 아닌 DOM에 액세스 할 수있는 이유는 무엇입니까?

function replaceContentOnClick(id, route) { 
    $('body').delegate(('#' + id), 'click', function(){ 
     $.get(route, function(data) { 
      $('#region_center .x-panel-body').html(data); 
     }); 
    }); 
} 

이 잘 작동을하지만 경우에만 이러한 자식 뷰는 HTML/Javascript/JQuery 일 뿐이지 만 자식 뷰에서는 존재하는 DOM 요소에 렌더링하고 JQuery 요소를 성공적으로 추가 할 수있는 경우에도 ExtJS 개체를 표시 할 수 없습니다. 이 순간에 ExtJS에 DOM이 존재하지 않는 것처럼 보입니다.

주요 문제는 다음과 같습니다는 jQuery 코드는 성공적 요소를 채우는 :

<script type="text/javascript"> 
$('#region_center .x-panel-body').html('this is from jquery...'); 
</script> 

하지만 의 ExtJS 코드는 동일한 요소 (AN 방화범이 끌려/네트 패널에보고 된 오류가없는 채우기에 실패) :

<script type="text/javascript"> 
    var region_center = new Ext.Panel({ 
     id: 'region_center', 
     region: 'center', 
     renderTo: '#region_center .x-panel-body', 
     margins:'10 10 10 10', 
     padding:'10 10 10 10', 
     autoScroll:true, 
     html: 'this is from ExtJS...' 
    }); 
</script> 

내가 너무 ExtJS를 할 수 JQuery와 같이 DOM 요소에 액세스 할 수 있는지 어떻게해야합니까?

+0

질문을 이해할 수 없습니다. 페이지의 링크를 클릭하고 Ext Panel을 생성하고 동적으로 렌더링 할 수 있기를 원하십니까? Ajax와 어떤 관계가 있습니까?Panel의 내용을 원격으로로드 하시겠습니까? –

+0

답장을 보내 주셔서 감사합니다. 저는 Kohana/PHP와 ExtJS를 사용하여 프레임 워크를 구축하고 있습니다. 목표는 개발자가 PHP에서 "Layout_Window"라는 PHP 싱글 톤 클래스에 액세스하는 모듈을 생성 할 수 있도록하는 것입니다.이 클래스는 Javascript/ExtJS/JQuery north/south/east/west/center 영역을 가진 ExtJS의 테두리 레이아웃 스타일을 기반으로하는 응용 프로그램 레이아웃을 만들 수 있습니다. 각 영역에는 다시 그리드, 양식, 탭, 아코디언 메뉴와 같은 ExtJS 요소가 추가로 포함될 수 있습니다. –

+0

내 현재 작업은 개발자가 Javascript/ExtJS에 대한 지식 없이도 PHP 수준에서 간단하게 작업 할 수 있도록 PHP-to-Javascript 통신이 작동하는 방식을 파악하는 중입니다. 항목 (ExtJS 패널)을 아코디언 메뉴로 가져 오거나 탭을 탭 영역으로 가져 오거나 기본 창 레이아웃에서 다른 영역의 내용을 변경합니다. –

답변

1

이 두 비트의 코드는 다른 작업을 수행하고 있습니다. 이 코드는 :

<script type="text/javascript"> 
$('#region_center .x-panel-body').html('this is from jquery...'); 
</script> 

... '#region_center .x를 패널 바디'에서 DOM 노드에 액세스하고 새로운 값 innerHTML을 주입한다. 이 코드는 :

<script type="text/javascript"> 
    var region_center = new Ext.Panel({ 
     id: 'region_center', 
     region: 'center', 
     renderTo: '#region_center .x-panel-body', 
     margins:'10 10 10 10', 
     padding:'10 10 10 10', 
     autoScroll:true, 
     html: 'this is from ExtJS...' 
    }); 
</script> 

... (즉, renderTo 설정 패널 자체 ID 'region_center'로 패널을 가리키는) 자체에 에게 완전한 패널 구성 요소를 렌더링하려고합니다. 이것은 의미가 없으며 작동하지 않습니다. 기존 DOM 노드에만 구성 요소를 렌더링 할 수 있습니다.이 예에서는 패널이 아직 렌더링되지 않았기 때문에 id가 'region_center'인 기존 DOM 노드가 없습니다.

이 될 것이라고 jQuery를에 일을하는지 정확히 수행하는 해당 코드 :이 실행될 때 모든 것을, 그것은 당신의 jQuery 코드처럼 정확하게 실행해야 DOM에서 동일한 가정

<script type="text/javascript"> 
Ext.get('#region_center').child('.x-panel-body').update('this is from Ext...'); 
</script> 

.

이제 BorderLayout이 올바르게 렌더링되고 실제로 'region_center'ID가있는 가운데 영역이 있다고 가정하면 동적으로 새 패널을 추가 할 수 있어야합니다 (새 패널의 ID가 고유한지 확인해야합니다) . 이 경우 레이아웃을 관리하기 때문에 DOM API 대신 Component API를 사용하는 것이 좋습니다.

// assuming myCenterPanel is a valid *component* ref (NOT a DOM element): 
myCenterPanel.add(new Ext.Panel(...)); 
myCenterPanel.doLayout(); 

또한 중앙 패널 (레이아웃 설정을 통해) 할당 적절한 레이아웃을 가지고 있는지 확인 싶어 : 예를 들어, 당신이 그런 짓을 할 것입니다. 위에서 설명한 것처럼 새로운 패널을 기본 DOM 노드에 직접 렌더링하는 경우 (위에서 시도한 것처럼) 일 수 있지만 장기적으로 다른 문제가 발생할 수 있습니다 (다시 말하지만 Ext의 이 경우 레이아웃 관리자).

+0

이것은 많은 의미를가집니다. PHP/Kohana/ExtJS 프레임 워크에서 개발자가 PHP 객체를 조작 할 수 있도록 처음으로 실행했습니다.이 객체는 나중에 ExtJS 응용 프로그램을 만듭니다. 꽤 유연한 지점에 있습니다. 하지만 클릭 처리 기능을 수행하기 위해 JQuery를 사용했기 때문에 JQuery를 사용하지 않고 ExtJS에서 더 많은 지식을 알게되었습니다. 이제는 JQuery를 사용하지 않고 다시 처리하고 있습니다. 이제 주요 작업은 (a) ExtJS 객체를 클릭하면 AJAX가 발생하고, AJAX 페이지에서는 이미 존재하는 ExtJS를 조작합니다. –

+0

... 피드 뷰어 예제 http://dev.extjs.com/deploy/dev/examples/feed-viewer/view.html이 형식의 다른 ExtJS 예제를 함께 모으는 방법을 알고있는 사람이라면 누구나 잘 알고 있습니다. (PHP) 페이지를 AJAX로로드하는 ExtJS를 사용하면 모든 링크에 감사드립니다. –

관련 문제