修改属于另一个控制器的视图

时间:2011-12-19 00:24:33

标签: model-view-controller extjs extjs4

我有一个类似桌面的应用程序,它有2个控制器:'桌面'代表桌面图标,'任务栏'代表任务栏,你可以找到按钮来最小化/恢复已经打开的窗口,比如MS Windows正在运行。

我目前遇到的问题是“如何显示窗口”的方法。双击图标后,我应该创建一个窗口,这可能发生在桌面控制器或任务栏控制器上(或者可能直接在视口上,因为它们可以拖到任何地方)。但是,当我创建一个窗口时,应该在任务栏上创建一个新按钮以最小化/恢复它。

因此,我考虑在任务栏控制器中处理窗口,但是我不知道如何从桌面控制器到达任务栏控制器。

目前我脑子里有3个想法:

  1. 桌面控制器直接将按钮添加到任务栏视图,但这样我感觉违反了MVC模式。另外,我需要在桌面视图中指定TaskbarView。
  2. 图标双击后桌面控制器在任务栏控制器上触发自定义事件。在这种情况下,任务栏打开窗口并添加按钮,这种方法非常线性我不知道如何从另一个控制器引用控制器(在这种情况下) ,从桌面到任务栏)
  3. 桌面控制器上的itemdblclick事件的Ext.Application寄存器。触发此事件时,它会在任务栏控制器上重定向(或调用自定义事件)。在此之后,一切都像点2一样。这样我集中了路由功能(如rails),但也可能发生Application对象变得非常大。此外,我正在使用它作为“巨型控制器”来路由所有东西,但这不是一个大问题,考虑使用rails做类似的东西。
  4. 应用程序不应拆分为2个控制器(因此桌面和任务栏应该是一个),一切都会好的。我不认为这种方法是正确的。
  5. 所以,我的问题是:

    • 我应该使用哪种方法:1,2,3,4(或指定是否有不同的东西)?
    • 窗口应该属于什么:桌面控制器,任务栏控制器,还有什么?

    感谢您的回答

1 个答案:

答案 0 :(得分:1)

我有类似的设置。我个人会选择2.有两种方法可以解决这个问题。一种是让父母同时包含桌面和任务栏作为其子项,它可以管理两者之间的通信。您可以创建父级侦听的自定义事件,并将它们定向到正确的子级。

因此,例如,父级创建任务栏和桌面,并在桌面上侦听图标点击事件。当图标上出现单击事件时,父级接收事件,然后在内部确定需要执行的操作。在这种情况下,它知道它需要调用任务栏并为其上的打开窗口创建按钮。

您还可以在JavaScript中使用Mediator设计模式来注册发件人和侦听器。所以你可以发送它,桌面是图标点击事件的发送者,任务栏是这些事件的监听者。单击该图标将向调解器中设置的所有侦听器发送事件。这样您就不需要父级来管理它。但个人我更喜欢父母。