[akabana-user:257] yui-FrameworksでのFlexNativeMenuEvent.ITEM_CLICKイベントの拾い方
小田和陽一
[E-MAIL ADDRESS DELETED]
2011年 3月 30日 (水) 00:12:37 JST
初めまして。Odakazと申します。
@ITで連載が始まった、「yui-frameworksで作るmixiボイスAIRアプリ」
(http://www.atmarkit.co.jp/fwcr/index/index_yuimixi.html)
に触発されて、yui-frameworksをさわりはじめました。
今は自分用の小さなAIRアプリを作っているところです。
教えていただきたいのは、FlexNativeMenuのITEM_CLICKイベントをActionで拾う方法です。
今回つくっているアプリのViewはspark.components.Windowで作成しており、そのmenuプロパティにFlexNativeMenuのインスタンスを設定しています。
メニューの中身は、Helperの中で組み立てて、FlexNativeMenuのdataProviderにセットするようになっています。
このFlexNativeMenuのITEM_CLICKイベントを拾うため、Actionにいくつかの書き方でハンドラを定義してみたのですが、全くひっかかりません。
・試してみたハンドラ定義(applicationMenuは、Viewで定義しているFlexNativeMenuのidです)
handler function applicationMenuItemClickHandler():void
public function applicationMenuItemClickHandler():void
handler function applicationMenuItemClick():void
public function applicationMenuItemClick():void
handler function applicationMenu_itemClick():void
public function applicationMenu_itemClick():void
いまはとりあえず、FlexNativeMenuのイベントハンドラを設定するメソッドをHelperに用意して、そのメソッドをActionから呼ぶ方法でしのいでいます。
できれば他のハンドラと同様に、イベントハンドラを定義するだけですめばありがたいのですが・・・。
なお、アプリケーションの構成ファイルは以下のような感じになっています。
・アプリケーショのルート
<?xml version="1.0" encoding="utf-8"?>
<yui:YuiWindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:yui="http://yui.akabana.seasar.org/1.0"
rootViewClass="examples.view.MainView"
>
<fx:Style source="Examples.css"/>
</yui:YuiWindowedApplication>
・Examples.css
@namespace examples "examples.view.*";
examples|MainView {
action:ClassReference("examples.action.MainAction");
}
・View(examples.view.MainView.mxml)
<?xml version="1.0" encoding="utf-8"?>
<s:Window xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"
menu="{applicationMenu}">
<fx:Declarations>
<mx:FlexNativeMenu id="applicationMenu" />
</fx:Declarations>
</s:Window>
・Helper(examples.helper.MainHelper.as)
package examples.helper
{
import examples.view.MainView;
public class MainHelper
{
public var view:MainView;
public function setup():void
{
var menuItem1:Object = {label: "MenuItem1"}
var menuItem2:Object = {label: "MenuItem2"}
var menu:Object = {label: "Menu", children: [menuItem1, menuItem2]};
view.applicationMenu.dataProvider = [menu];
}
}
}
・Action(examples.action.MainAction.as)
package examples.action
{
import examples.helper.MainHelper;
import mx.events.FlexNativeMenuEvent;
public class MainAction
{
public var helper:MainHelper;
public function onAssembleCompleteHandler():void
{
trace("onAssembleCompleteHandler");
helper.setup();
}
}
}
以上です。
akabana-user メーリングリストの案内