XUL MenuItem исчезает после динамического добавления всплывающего окна - PullRequest
1 голос
/ 19 октября 2011

Я пытаюсь добавить подменю в динамически создаваемое всплывающее меню, которое появляется при щелчке правой кнопкой мыши в любом месте окна браузера.Первый уровень построен нормально, но когда я пытаюсь добавить всплывающее окно к этим записям, пункты меню исчезают.

это объект, из которого я строю:

var snpshot = {
    'Head':'', 
    'Subhead':'',
    'Date':'',
    'Url':'',
};

Этоэто код, сохраненный в моем событии onLoad, поэтому меню создается при запуске браузера:

часть, которая не работает, - это rclickItem.appendChild (mPopup) - это«что-то», но пункты меню, которые добавляются во всплывающем окне, становятся пустыми и сокращаются, хотя при наведении курсора на них кажется, что они все еще там.

  onLoad: function() {
    var mainPop = document.createElementNS(XUL_NS, "menupopup");
    mainPop.setAttribute('id', 'rclickMenu_MenuPopupContainer');

    //attach it to main rclick object
    var mainRclick = document.getElementById("rclickMenu_Main");
    mainRclick.appendChild(mainPop);

    mainOverlay.createMainRclick(); //THIS WORKS
    //add popups -- AS SOON AS THE POPUPS ARE ADDED THE ENTRIES DISAPPEAR!
    mainOverlay.createPopUpMenus();
},

createMenuItem: function(lblToUse){
    //create the XUL menuitem
    var itemToAdd = document.createElementNS(XUL_NS, "menuitem");
    itemToAdd.setAttribute('label',lblToUse);
    itemToAdd.setAttribute('id','rclickMenu_'+lblToUse);
    return itemToAdd;
},

createMenuPopup: function(idToUse){
    var mPopup = document.createElementNS(XUL_NS, "menupopup");
    mPopup.setAttribute('id','rclickMenuPopup_' + idToUse );
    return mPopup;
},

createMainRclick: function(){
    for (var property in snpshot){
        var mItem = mainOverlay.createMenuItem( property );
        var mainPop = document.getElementById("rclickMenu_MenuPopupContainer");
        mainPop.appendChild(mItem);
    }
},

createPopUpMenus: function(){
    for (var property in snpshot){
        var mPopup = mainOverlay.createMenuPopup( property );

        var rclickItem = document.getElementById("rclickMenu_"+property);
        rclickItem.appendChild(mPopup);
    }
},

И XUL (это основнойвсплывающее окно, которое появляется при щелчке правой кнопкой мыши, с добавленным пунктом меню (который я динамически добавляю в js)

<menupopup id="contentAreaContextMenu">

    <menu 
     id="rclickMenu_Main" 
     label="Main Section">
    </menu>

</menupopup>

1 Ответ

2 голосов
/ 20 октября 2011

Из <menupopup> документации :

Может быть размещено внутри menu, menulist, toolbarbutton или button

Обратите внимание, что тег <menuitem> отсутствует в этом списке.Фактически, родительские элементы ваших тегов <menupopup> должны быть тегами <menu> - тогда вы получите подменю (см. документация ).Тег <menuitem> всегда является отдельным элементом меню.

Для справки, что происходит при добавлении <menupopup> к тегу <menuitem>: этот тег заменяет автоматически сгенерированное содержимое <menuitem>.<menupopup> не является визуальным элементом, поэтому вы получаете пункт меню без какого-либо видимого содержимого.

...