我正在尝试在大树上定义多个右键单击菜单。 (使用dojo 1.8)。 我在树中有20多种不同类型的数据项。对于每个此数据项类型,都有一个特定的右键单击菜单。 我已尝试使用菜单的“选择器”将菜单附加到TreeNode,如http://dojotoolkit.org/reference-guide/1.9/dijit/Menu.html#attaching-to-multiple-nodes中所述。我已经为每个treeNode添加了一个具有类型名称的类,并相应地定义了菜单选择器。
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的菜单有时会出现在它的所有子节点上。它似乎与菜单定义的顺序有关。如果我首先定义用作其他人的父项的数据项的菜单,那么问题就会少一些。不幸的是,我有可能是其他人的父级和/或子级的数据项,这些类型可能出现在树的所有深度,因此更改菜单创建的顺序不足以解决问题......
我做错了吗?是否有任何“选择器”技巧来处理这种情况? (因为树很大,我宁愿避免使用TreeNode id)
感谢您的帮助,
答案 0 :(得分:0)
尝试这种方式,但请记住,如果您的商店不可用,请在全球范围内声明您的商店,例如_store:store。对于菜单项,这应该可以尝试,它适用于我的情况
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>