2013-08-02 47 views
0

我想在一棵大樹上定義多次右擊菜單。 (使用道場1.8)。 我在樹中有20多種不同類型的數據項。對於每個這種數據項類型,都有一個特定的右鍵單擊菜單。 我嘗試用菜單的「選擇器」將菜單附加到TreeNode,如http://dojotoolkit.org/reference-guide/1.9/dijit/Menu.html#attaching-to-multiple-nodes中所述。我已經爲每個treeNode添加了一個具有該類型名稱的類並相應地定義了菜單選擇器。Dojo:在一棵大樹上多次右擊菜單

一個20 +菜單:

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的創作與加入的className類型:

 _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的菜單有時會出現在它的所有子節點上。這似乎與菜單定義的順序有關。如果我首先定義用作其他父項的數據項目的菜單,則會出現一些問題。不幸的是,我得到的數據項可以是其他父項和/或子項的數據項,這些類型可能會出現在樹的所有深度處,因此更改菜單創建的順序不足以解決問題...

我做錯了什麼?是否有任何'選擇器'技巧來處理這種情況? (因爲樹是相當大的,我寧願避免使用樹節點的ID)

感謝您的幫助,

回答

0

試試這個方法,但記住,如果你得到店面不大avaialble請全球宣佈你的店就像_Store:商店。對於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>