ネイティブコンテキストメニューが呼び出されると、それをリモートサービス呼び出しのセットから読み込む必要があります。 現在の実装では、メニューを開く前に項目を設定する必要があります。Adobe AIRのネイティブコンテキストメニューにアイテムを非同期で追加するにはどうすればよいですか?
アイデア?
感謝;)
ネイティブコンテキストメニューが呼び出されると、それをリモートサービス呼び出しのセットから読み込む必要があります。 現在の実装では、メニューを開く前に項目を設定する必要があります。Adobe AIRのネイティブコンテキストメニューにアイテムを非同期で追加するにはどうすればよいですか?
アイデア?
感謝;)
編集:私はもう一度あなたの質問を再読み込みし、あなたはそれが開かれていない前に、それを開いているときにメニューを更新したいことを実現しました。 displayingという名前で聞くことができる別のイベントがありますが、テストでは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>
Peter、 徹底的な説明をありがとう。 今、問題は、メニューが表示されていることを伝え、すぐにアイテムを設定する必要があるということです。明らかに、非同期の返信が到着するまで待機するように指示する方法はありません。これは私の場合です。メニュー項目は動的であり、外部ロジックに依存します。 –