Dojo: несколько контекстных меню на большом дереве
Я пытаюсь определить несколько меню правой кнопки мыши на большом дереве. (используя додзе 1.8). У меня есть более 20 различных типов элементов данных в дереве. Для каждого из этих типов элементов данных существует определенное меню, вызываемое правой кнопкой мыши. Я попытался прикрепить Меню к TreeNode с помощью "селектора" Меню, как описано в http://dojotoolkit.org/reference-guide/1.9/dijit/Menu.html. Я добавил к каждому 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);
Моя проблема в том, что используется в дереве, он не работает должным образом: меню для некоторого treeNode типа A иногда появляется на всех его дочерних элементах. Кажется, это связано с порядком определения меню. Есть немного меньше проблем, если я сначала определю меню для элементов данных, используемых как родительские для других. К сожалению, у меня есть элементы данных, которые могут быть родительскими и / или дочерними по отношению к другим, эти типы могут отображаться на всех уровнях в дереве, поэтому изменение порядка создания меню недостаточно для решения проблемы...
Я делаю что-то не так? Есть ли какой-нибудь трюк с селектором для этого случая? (поскольку дерево довольно большое, я бы предпочел избегать использования идентификаторов TreeNode)
Спасибо за любую помощь,
1 ответ
Попробуйте таким образом, но помните, что если магазин не доступен, пожалуйста, объявите свой магазин глобально как _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>