2013-08-02 2 views
0

큰 트리에서 여러 개의 오른쪽 클릭 메뉴를 정의하려고합니다. (dojo 1.8 사용). 20 개 이상의 다른 유형의 데이터 항목이 트리에 있습니다. 이 데이터 항목 유형마다 특정 마우스 오른쪽 버튼 클릭 메뉴가 있습니다. 에서 설명한대로 Menu의 'selector'를 사용하여 TreeNode에 메뉴를 연결하려고했습니다. 각 treeNode에 유형 이름이있는 클래스를 추가하고 이에 따라 메뉴 선택기를 정의했습니다. 20 + 메뉴의Dojo : 큰 트리에서 마우스 오른쪽 버튼으로 여러 번 누르는 메뉴

하나 :

var personMenu = new dijit.Menu({ 
     targetNodeIds: ["theTree"], 
     selector: ".type_person", 
     menutype: 'person' 
    }); 
    personMenu.addChild(new dijit.MenuItem({ 
     label: "person properties", 
     onClick: function(){ createDialog('edit');} 
    }));    

클래스 이름으로 추가 유형을 가진 TreeNode를 만들기 :

 _createTreeNode: function(args){ 
     //Logger.info("_createTreeNode "+args.item.type+";"); 
     args.className = 'type_'+args.item.type; 

     console.dir(args); 
     var node = new dijit._TreeNode(args); 

내 문제 트리에서 사용이 제대로 작동하지 않는다는 것입니다 : A 유형의 일부 treeNode에 대한 메뉴가 모든 하위에 표시되는 경우가 있습니다. 그것은 메뉴 정의의 순서와 관련이있는 것 같습니다. 다른 사람들에게 부모로 사용되는 데이터 항목에 대한 메뉴를 먼저 정의하면 문제가 조금 줄어 듭니다. 불행히도 부모 및/또는 다른 사람의 자식이 될 수있는 데이터 항목이있어 그 유형은 트리의 모든 깊이에 나타날 수 있으므로 메뉴를 만드는 순서를 변경하면 문제를 해결하기에 충분하지 않습니다.

내가 잘못하고 있니? 이 경우를 처리 할 '선택자'트릭이 있습니까?

답변

0

당신이 가게 _store처럼 세계적으로 상점을 선언하십시오 있음없는 얻는 경우에 기억이 방법을 시도하지만, 어떤 도움을

감사 (나무가 매우 큰대로, 나는 TreeNode를 아이디의 사용을 피해야하는 것을 선호) : 저장. menuitems이게 그것을 밖으로 시도해보십시오 내 사건에 대해 작동합니다

onClick: function (evt){ 
           idCount = idCount +1; 
           var newItem = {}; 
           newItem.id = idCount; 
           newItem.main = selectedItemId; 
           store.newItem(newItem); 
           sel.setStore(store,'',{query:{main: 0}}); 
           /* mytree.update();*/ 
          }, 

    <ul dojoType="dijit.Menu" id="ba" style="display: none;"> 
     <li dojoType="dijit.MenuItem" onClick="function (evt)">Add a new folder</li></ul>