0

Flex の Parsley Framework を使用してサンプル MVC を作成しています。スライダーの変更で何かを行うために、モデルにイベントをディスパッチするスライダー コントロール (mx:HSlider) を 1 つ持っています。そのために、1 つのカスタム イベントを作成し、イベントの処理にパセリ セレクターを使用しています。ここにコードがあります

//Event
        class MyEvent extends Event
        {
        public static const MSG="msg";
    //constructor, clone method and two fields
        }

//View
    <fx:Metadata>
    [Event name="msg" type="pack1.MyEvent"]
    [ManagedEvents("msg")]
    </fx:Metadata>

    <fx:Declaration>
    <parsley:Configure/>
    </fx:Declaration>

    public function onSliderChange(event:SliderEvent):void
    {
    dispatchEvent(new MyEvent(MyEvent.MSG,event.thumbIndex,event.value);
    }

//Model
    [MessageHandler(selector="msg")]
    public function doSomething(event:MyEvent)
    {
    //code
    }

これで、イベントは正常にディスパッチされますが、どういうわけかメッセージ ハンドラーが呼び出されません。ここで何が問題なのですか?誰でも私に何が問題なのか教えてもらえますか? あらゆる種類の助けをいただければ幸いです。前もって感謝します。

注 : コンテキストが初期化され、モデルも注入されています。しかし、イベントは私にいくつかの奇妙な行動を示しています。そのハンドラーがあるモデルにディスパッチされていないだけです。

4

4 に答える 4

0

ビュー クラスでは、Parsley は自動的にビューを「管理」しません。ビューは通常、Parsley コンテキストに追加されません (特にコンテキストに追加しない限り)。ビューは行き来する可能性があるため、コントローラー、動的コマンド、モデルなどの場合のように、デフォルトで Parsley にビューを管理させたくありません。

Parsley にビューを管理させ、メッセージ ハンドラーを呼び出す必要があることを認識させるには、Parsley<Configure />タグをビューに追加する必要があります。これにより、ビューは「configureView」タイプのイベントをディスパッチします。このタグが存在する前は、ビューがステージに追加されたときに、このイベントを手動でディスパッチしていました。

ビューで次のようにします。

<fx:Declarations>
    <parsley:Configure />
</fx:Declarations>

(Flex 3 アプリでは、<Configure />タグをビューに追加するだけです。つまり、宣言タグ内には配置しません。これについては、Parsley のドキュメントを参照してください。

于 2013-02-05T23:07:04.263 に答える
0

一部の構成またはパセリイベントを含む通常のイベントにエラーがあると思いましたが、私のコードでは、クラスから複数のイベントをディスパッチしていて、それらを次のように書いていました

[ManagedEvents("a","b","c")]

しかし、パセリのドキュメントを読んだ後、私はそれが

[ManagedEvents("a,b,c")]

それは私の問題を解決しました。返信ありがとうございます。

于 2013-02-07T05:27:35.447 に答える
0

これを試して:

[MessageHandler(selector="msg")]

閉じ括弧がありません。

于 2013-02-05T15:31:49.837 に答える