0

我正在使用 Flex 的 Parsley 框架创建一个示例 MVC。我有一个滑块控件 (mx:HSlider),它将事件分派给模型以在滑块更改时执行某些操作。为此,我创建了一个自定义事件,并使用欧芹选择器来处理事件。这是代码

//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

试试这个:

[MessageHandler(selector="msg")]

你错过了一个右括号。

于 2013-02-05T15:31:49.837 回答
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

您必须将视图添加到上下文中。这是唯一缺失的部分。

于 2013-07-28T18:27:39.583 回答