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>
Другие вопросы по тегам