0

我已经阅读过,Views和Controllers应该互不可见。视图和控制器彼此不可见?怎么会这样?

控制器如何监听UI视图中的按钮点击?

当然,控制器需要知道添加事件监听器的视图 UI视图需要调用控制器中的函数或将事件分派给控制器。

+0

这是常见的使用静态调度类这种情况下 – www0z0k 2011-03-18 14:07:50

+0

啊我看...如果我理解正确的是。所以对于每个视图你有一个特定的静态调度器,所有的各种UI选项,由视图UI触发?由控制器或调解器进行监听? – davivid 2011-03-18 14:39:34

+0

我目前的mvc不是那么纯粹^^我们使用静态的'EventDispatcher'实例,因此可以广播一个事件,无论它在哪里都可以被任何订阅的实例听到。然而,对于像'PlayerModel.health改变 - >更新PlayerHealthBar.value'这样的东西,使用'[Bindable]'是一种更好的做法 – www0z0k 2011-03-18 16:34:09

回答

0

我的MVC的唯一的经验是与使用Robotlegs的框架,所以我会使用这个框架时

我的意见只能使用原生的Flash事件这是在听了(MouseEvent.CLICK等)尽量说明我的方法调解员的观点。当介体接收到本地事件时,它将发送一个特定于应用程序的事件,例如LoginEvent.LOGIN,该事件可以被映射,然后使用上下文中的命令映射发出命令。

很抱歉,如果这没有多大意义,但基本上你的视图会触发本机事件,你的中介将监听这些本机事件,然后触发应用程序特定的事件,然后运行你的命令。你使用中介作为你的观点的“耳朵”,并保留任何逻辑。应用程序上下文允许您在发生某些事件时触发命令,以便您的视图和命令分离。

+0

我想我明白了 - 但是点击监听器如何区分不同的UI元素呢?你使用类似e.target.name(login_btn,logout_btn等)? – davivid 2011-03-18 14:33:27

+0

如果在视图中有三个按钮,则可以为每个按钮启动一个不同的自定义事件,并在中介中侦听这些事件,或者可以检查medator中本地flash事件的有效负载,以决定您想要执行的操作它。 – redHouse71 2011-03-18 14:50:01

+0

使用本地事件的好处是,您可以将视图用于另一个项目,而不必更改任何自定义事件,对于任何特定于项目的事件而言,您的视图是“愚蠢的”,只能处理本地事件。你的中介是唯一与这个特定项目相关的东西。对不起可能不是最好的解释。 – redHouse71 2011-03-18 15:01:54