【问题标题】:MVC Pattern - Bind event listeners from controller onto views elements?MVC 模式 - 将控制器中的事件侦听器绑定到视图元素上?
【发布时间】:2010-09-02 18:40:09
【问题描述】:

如何将控制器中的事件侦听器绑定到视图的元素,例如按钮(点击事件)到它自己的处理程序?

最初我是从例如视图中执行此操作的。

button.addEventListener(MouseEvent.CLICK, controller.buttonClick);

但是现在意识到这是错误的,因为阅读“每个视图只应该“知道”它所代表的模型,而“不知道”控制器

【问题讨论】:

    标签: actionscript-3 model-view-controller design-patterns


    【解决方案1】:

    模型应该有这个按钮的实例,所以控制器会访问模型来添加事件监听器,但是视图只会显示这个按钮,只会添加到舞台。

    【讨论】:

    • 肯定不是因为模型不应该知道视图有什么 gui?
    • 如果我们只谈论数据,那么是的,但是我们已经实现了 UI 组件,您应该有一些地方来描述它们,例如看看 flex 4 spark 皮肤,非常好的架构,其中作为由 mxml 视图扩展的模型,您可以在模型或视图中添加事件,但是如果您想要真正的控制器逻辑,您应该添加 default 处理程序到您的 UI 组件,这应该在模型或视图内部确定,然后在控制器中使用自定义逻辑覆盖它们,或者如果它们不是模型的一部分并且它不是自定义视图组件的一部分,则添加到视图内部。再次检查火花皮肤。
    • 非常感谢会调查它。如果我感兴趣的唯一事件是 KeyDown 和 MouseMove,是否可以简单地添加到视图中:addEventListener(KeyboardEvent.KEY_DOWN, controller.keyDownHandler)
    • 是的,这样你只定义调用方式,而不是控制器的逻辑,你是对的。 :) 并且不要忘记接受答案并为 cmets 评分)
    【解决方案2】:

    控制器直接引用视图,因此可以将事件侦听器绑定到适当的视图元素。如果您愿意,View 可以公开公共方法来设置绑定。

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多