2012-05-09 4 views
0

"위로"쿼리하는 방법이 있습니까? 나는 Component에 있고 control()이있는 부모 이벤트에 리스너를 등록하려고합니다. 이 쿼리는 내 메인보기의 부모를 가져옵니다.ExtJS4를 사용하는 부모를위한 ComponentQuery?

+1

모든 질문에 대답의 80 %가 포함되어 있습니다. :) ...up() – dbrin

답변

4

ExtJS4에서는 Ext 요소의 'up()'을 사용할 수 있습니다. 당신이 당신의 구성 요소의 구조에 대한 몇 가지 세부 사항을 제공하는 경우

var parentEl = Ext.get('childID').up('div.parentClass'); 

이/요소 내가 맞아야 구체적인 예를 제공 할 수 있습니다 :

params 객체를 파라미터는 예컨대을 발견하고자하는 부모 요소의 문자열입니다.

편집 :가는 당신이 뭘하려는 건지에 대한 충분한 구성 요소

var myComponent = // however you've got it 

var theParentEl = myComponent.getEl().up('div.parentClass'); 
+0

감사합니다. 나는'up()'메서드에 대해 알고 있지만,이 기능이 구성 요소 쿼리 선택기로 필요합니다. –

+0

구성 요소에서 getEl()을 사용하여 포함 요소를 가져온 다음 (설명 된대로 up 메서드 사용) 또는 Ext 컨테이너를 반환하는 Component.findParentByType (xtype)을 사용하는 경로로 이동할 수 있습니다. – dougajmcdonald

+0

그래서 올라가는 것은 방법으로 가능합니까? "a

2

보통 up('PARENTCLASS')에서 '최대'표시합니다. 내가 알고있는 것처럼

items: [ 
... 
    { xtype: 'checkbox', listeners: { 
     change: function() { this.up('window').fireEvent('checkboxchanged'); } 
    }} 
... 
] 
2

것은 특별히 하위 구성 요소의 컨트롤러 제어 기능에서 구성 요소의 부모에 의해 전달 된 이벤트에 듣고 싶은 : 다음 요소가에있는 양식에 대한 이벤트를 생성 그래서 모든 코드를 통해 할 것입니다 .

상위 컨트롤러 이벤트를 수신하기 위해 하위 컨트롤러의 제어 기능에 넣을 수있는 '부모 < 구성 요소'와 같은 쿼리 선택기가 없습니다.

일반적으로 부모보기를 하위 컨트롤러에 추가하면 이벤트를들을 수 있습니다. 하지만 당신이 다른 컨트롤러 또는 뭔가 위임하려고하기 때문에 당신이하지 않는 것으로 가정합니다.

부모 이벤트가 발생할 때마다 하위 구성 요소에서 이벤트를 실행할 수 있습니다. 부모 컨트롤러 내부에서이 같은 그것을 할 수 :

var child = parent.down('child'); 
child.fireEvent('myOwnEventName', arg1, arg2, arg3, etc); 

그런 다음 당신은 당신이 그것을 원하는 로직을 실행하기 위해 자식 컨트롤러의 제어 기능에서 'myOwnEventName'에 대한 처리기를 추가합니다.

상위 컨트롤러에 컨트롤러가없는 경우 상위 컨트롤러 구성 요소를 하위 컨트롤러의보기로 추가하면됩니다.

1

Sencha 도움말에서 "후보 구성 요소의 구성원 표현식을 테스트 할 수 있습니다."표현식이 진실 값을 반환하면 후보 구성 요소가 "http://docs.sencha.com/ext-js/4-0/#!/api/Ext.ComponentQuery 도움말에 포함됩니다.

내가 내 컨트롤러에 다음과 같은 작업을 수행 할 수 실현 걸 렸어요 :

this.control({ 
    'window{down("testcomp")}[down]': { beforedestroy: this.doNotCloseIfUnsaved } 
}); 

, 우리가 어떤 임의의 코드를 호출 할 수있는 {} 작업을 사용. 효율성의 관점에서 볼 때 매우 나쁘다. 그러나 그 일은 끝났다. 오른쪽에서 왼쪽으로 구성 요소 쿼리를 실행하기 때문에 [down]을 추가해야했기 때문에 모든 구성 요소에서 실행하기 전에 down()이 존재하는지 확인해야합니다. 따라서, 어떤 구성 요소를 보유하고있는 창에 이벤트를 첨부 할 수있었습니다.

물론 아래 위치가 아닌 직접적인 자식인지 확인하려면 down() 대신 child()와 같은 다른 함수를 사용할 수도 있습니다.

+0

홀리 몰리 - 당신이 그걸 할 수 있는지 전혀 몰랐습니다. 당신이 나에게 묻는다면 그 조금은 읽을 수 없다. – dbrin

관련 문제