Как можно асинхронно добавлять элементы в собственное контекстное меню в Adobe AIR? - PullRequest
0 голосов
/ 17 марта 2009

После вызова собственного контекстного меню мне нужно заполнить его набором вызовов удаленных служб. Текущая реализация, однако, требует, чтобы пункты были установлены перед открытием меню.

Есть идеи?

Спасибо;) A

1 Ответ

0 голосов
/ 20 марта 2009

РЕДАКТИРОВАТЬ: я еще раз перечитал ваш вопрос и понял, что вы хотите обновить меню во время его открытия, а не до того, как оно открывается. Есть еще одно событие, которое вы можете прослушать, которое называется , отображающее , но в тесте, который я провел с моим тестовым приложением HTML / JS, показалось, что событие не сработало. Если вы используете Flex, вы можете исследовать это или выяснить, не ошибся ли я здесь:

    window.htmlLoader.contextMenu = new air.NativeMenu();
    menu1 = new air.NativeMenu();
    loading=new air.NativeMenuItem("Loading...");
    menu1.addItem(loading);
    menu1.addEventListener(air.Event.DISPLAYING, addMenu1Items);
    function addMenu1Items(){
        menu1.removeItem(loading);
        item11 = new air.NativeMenuItem("Item 1");
        item11.addEventListener(air.Event.SELECT, function(e){alert("You clicked Menu 1,Item 1");e.preventDefault();});

        item12 = new air.NativeMenuItem("Item 2");
        item12.addEventListener(air.Event.SELECT, function(e){alert("You clicked Menu 1,Item 2");e.preventDefault();});

        menu1.addItem(item11);
        menu1.addItem(item12);
    }

Я только что провёл тест с приложением HTML / Javascript, и мне кажется, что сработает следующее (беззастенчиво разорвано и изменено с: http://www.adobe.com/devnet/air/ajax/quickstart/adding_menus.html, и если вы используете Flex, есть версия и для этого: http://www.adobe.com/devnet/air/flex/quickstart/adding_menus.html).

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Context</title>
    <script src="lib/air/AIRAliases.js" language="JavaScript" type="text/javascript"></script>
    <script type="text/javascript">
        window.htmlLoader.contextMenu = new air.NativeMenu();
        menu1 = new air.NativeMenu();

        item11=new air.NativeMenuItem("Item 1");
        item11.addEventListener(air.Event.SELECT,function(e){alert("You clicked Menu 1,Item 1");e.preventDefault();});

        item12=new air.NativeMenuItem("Item 2");
        item12.addEventListener(air.Event.SELECT,function(e){alert("You clicked Menu 1,Item 2");e.preventDefault();});

        menu1.addItem(item11);
        menu1.addItem(item12);

        menu2 = new air.NativeMenu();
        item21=new air.NativeMenuItem("Item 1");
        item21.addEventListener(air.Event.SELECT,function(e){alert("You clicked Menu 2,Item 1");e.preventDefault();});

        item22=new air.NativeMenuItem("Item 2");
        item22.addEventListener(air.Event.SELECT,function(e){alert("You clicked Menu 2,Item 2");e.preventDefault();});

        menu2.addItem(item21);
        menu2.addItem(item22);

        window.htmlLoader.contextMenu.addSubmenu(menu1,"Menu 1");
        window.htmlLoader.contextMenu.addSubmenu(menu2,"Menu 2");

        //Displays the context menu
        function showContextMenu(event){
            event.preventDefault();
            window.htmlLoader.contextMenu.display(window.nativeWindow.stage, event.clientX, event.clientY);
        }

        function addItemToContextMenu(){
            menux = new air.NativeMenu();
            item=new air.NativeMenuItem("Item &1");
            item.addEventListener(air.Event.SELECT,function(e){alert("You clicked Menu X,Item 1");e.preventDefault();});
            menux.addItem(item);
            menux.addItem(new air.NativeMenuItem("Item &2"));
            window.htmlLoader.contextMenu.addSubmenu(menux,"Menu X");
        }


        function clearAndAdd() {
            window.htmlLoader.contextMenu = new air.NativeMenu();
            addItemToContextMenu();
        }
    </script>
</head>
<body id="body">
<div id="contextDiv"  oncontextmenu="showContextMenu(event)">
Right click to bring up the context menu.<br><br>
<input type="button" value="Add Item To Context Menu" onclick="addItemToContextMenu()"><input type="button" value="Clear Menu and Add Item to Context Menu" onclick="clearAndAdd();">
</div>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...