2010-05-26 2 views
0

은 1 - 9의 레이블이있는 dijit.MenuItem 개체가 포함 된 하나의 dijit.Menu입니다. 81 개의 'nodes'(너무 많은 것들이 있기 때문에 개인 ID가 필요 없다. 간단히 dojo.query ('their-css-class-name')로 수집한다. 이것은 위젯 내부에서 컨텍스트 메뉴와 해당 메뉴 항목을 인스턴스화하는 데 사용하는 코드입니다. 내가을 할 노력하고있어 무엇Dojo Popup Menus - 메뉴 항목 이벤트를 여러 '트리거링'요소에 연결

var contextMenu = new dijit.Menu({targetNodeIds:dojo.query(".sudokuNode"), leftClickToOpen:true}); 

    for(var i = 1; i <= 9; i++) { 
     contextMenu.addChild(new dijit.MenuItem({ 
      label:i, 
      onClick: function(evt) { 
       //?? 
      } 
     })); 
    }; 

    contextMenu.startup(); 

은 클릭 노드를 가지고 있으며, 이후 상황에 맞는 메뉴의 메뉴 아이템에서 선택된 값 (1-9)로 채워질 수있는 팝업/컨텍스트 메뉴를 엽니 다.

내 문제 내 문제는 "알고"하는 방법을 알고있는 노드 중 하나는 oncontextmenu 이벤트를 발생시키는 것이고, 그 노드를 참조하는 방법을 모르는 'onClick'메서드는 메뉴 아이템.

해당 컨텍스트에서 호출 노드를 참조하는 방법을 보여주는 도움이 감사하겠습니다! 이것이 충분한 정보가 아니라면, 내 문제를 설명하기 위해 내가 할 수있는 다른 것을 알려주십시오!

답변

0

evt.target 실제로 클릭 된 노드를 가져와야합니다. 구조에 따라 다른 탐색을 수행하거나 dijit.getEnclosingWidget()을 사용해야 할 수 있습니다.

MenuItems가 이벤트를 버블로 허용하는 경우 (잘 모르겠지만 직접 사용하지 않은 경우) 메뉴의 onClick() 메서드에 연결할 수 있으므로 재생중인 이벤트 리스너가 하나뿐입니다. .

+0

음, 문제는 메뉴 항목을 선택할 때 onClick이 발생하도록하려는 것입니다. evt.target은 menuItem 자체이며 둘러싼 위젯은 메뉴입니다 ... 어느 쪽이 나에게 클릭 한 노드에 도달 할 수있는 방법을 제공하지 않습니다 ... – Dfowj

+0

클릭 한 노드는 내부 노드를 MenuItem 템플릿에서 가져 와서 예상 한 결과를 얻지 못할 수도 있습니다. 그러나 'onclick'DOM 이벤트 (위젯 메서드 인 'onClick'이 아니라 N.B.)에 dojo.connect를 연결하여 검사 할 수 있도록 할 수 있습니다. 그림 그리기 어려운 그리드의 예에 링크해야 할 수도 있습니다. –