2011-03-10 6 views
1

TreePanel이 포함 된 메뉴가 있습니다. 사용자는 컨텍스트 메뉴를 사용하여 TreePanel의 노드와 상호 작용할 수 있어야합니다. TreePanel의 contextmenu 이벤트에 첨부 된 함수에서 컨텍스트 메뉴를 표시하고 있습니다.ExtJS 메뉴 항목의 상황에 맞는 메뉴

이 제외 작동 : 컨텍스트 메뉴를 도시 allowOtherMenus: true없이

  1. 는 메인 메뉴를 초래하고 따라서 TreePanel가 사라질;
  2. 두 메뉴 중 하나에있는 allowOtherMenus: true을 사용하면 사용자가 TreePanel의 빈 영역을 클릭 할 때 상황에 맞는 메뉴가 사라지지 않습니다.

TreePanel이 메뉴 내의 항목이 아닌 것처럼 작동하도록 컨텍스트 메뉴를 표시하는 방법을 찾고 있습니다.

목업 : 그것은 아직 표시하지 않은 부작용이있을 수 있지만 내가 FF3/IE8/크롬에서 작동하도록 보인다이 발견 enter image description here

+0

잘 모르겠습니다. http://jsfiddle.net에서 실례를 게시하고 볼 수 있습니까? – JamesHalsall

+0

jsfiddle은 Ext Core 이외의 ExtJS를 지원하지 않으므로 메뉴 또는 TreePanel을 만들 수 없습니다. 대신 그림을 추가했습니다. –

+0

ok, 사용자가 treepanel (노드가 아닌)을 클릭하면 메뉴가 사라지게할까요? – JamesHalsall

답변

3

. 컨텍스트 메뉴가 표시 될 때

var hide_context_menu = function() { context_menu.hide() }; 

var context_menu = new Ext.menu.Menu({ 
    allowOtherMenus: true, 
    items: [...], 
    listeners: { 
     show: function() { 
      Ext.getDoc().on('mouseup', hide_context_menu); 
     }, 
     hide: function() { 
      Ext.getDoc().un('mouseup', hide_context_menu); 
     } 
    } 
}); 

allowOtherMenus: true은 MenuMgr에 의해 메인 메뉴의 숨기기를 방지 할 수 있습니다. 핸들러를 mouseup 이벤트에 숨기면 click 이벤트를 처리 할 수 ​​있습니다.

+0

그래, 그래, 나는 바인딩에 있지만 뭔가 '클릭 이벤트에 바인딩, 그게 더 잘 작동합니다. 그냥 모니터하고 이상한 문제가 있는지 확인하십시오. – JamesHalsall

+0

확인해 주셔서 감사합니다. –