РЕДАКТИРОВАТЬ: я еще раз перечитал ваш вопрос и понял, что вы хотите обновить меню во время его открытия, а не до того, как оно открывается. Есть еще одно событие, которое вы можете прослушать, которое называется , отображающее , но в тесте, который я провел с моим тестовым приложением 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>