[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 メーリングリストの案内