【问题标题】:What is the controller responsibility in ExtJS? Events in instance of Ext.window.Window?ExtJS 中的控制器职责是什么? Ext.window.Window 实例中的事件?
【发布时间】:2015-09-11 14:40:42
【问题描述】:

目前使用 ExtJS 4,我正在尝试使用控制器来实现所有事件,但是我在 Window 本身中处理了一些事件,它们是关闭和销毁事件。我需要在这里执行一些代码。

这是不好的做法吗?如果事件发生在 Window(Ext.window.Window 的一个实例)中。

我是否应该将这些事件转发给控制器来处理?

我不确定这样做的正确方法,但我认为我必须在它的事件中从我的“窗口”获取对控制器的引用,然后在控制器上调用 fireEvent?

这里的最佳做法是什么?

我使用的是 ExtJS 4.2,所以不能使用 MVVM。

ExtJS 似乎让我直接在“组件”中实现事件,但遵循 MVC 模式,这是不是不好的做法,一切都应该真正通过控制器。

【问题讨论】:

  • 我还必须实现窗口的后布局,因为我需要更多的东西。我目前正在“窗口”中处理这个问题,我应该将它转发给控制器并让控制器操纵组件而不是公司操纵自己吗?

标签: javascript extjs extjs4 extjs4.2 extjs5


【解决方案1】:

控制器或视口应处理该事件。 您不需要在窗口内引用控制器。

如果您想要自定义事件,则需要从窗口内部触发事件,例如:

this.fireEvent("myCustomEvent"[,elementThatTriggeredTheEvent]);

然后你需要使用对窗口的引用来监听控制器内部的事件:

yourWindow.on("myCustomEvent",this.myCustomEventHandler[,scope]);

还有一些方法可以在不引用事件触发元素的情况下监听事件。

编辑-关于您的评论:

如果您需要对窗口内的元素进行布局后处理,那么我会在窗口内进行。如果您想对窗口内未定义的元素进行处理,则让实例化元素的控制器处理它。在 ExtJS 5 中有一个叫做 ViewController 的东西。我不知道它是否已经在4.2中。您可以利用 ViewController 来拆分窗口中发生的内容。这是一个链接:

https://www.sencha.com/blog/using-viewcontrollers-in-ext-js-5/

编辑 2:

如果您不想要自定义事件,只需使用控制器监听窗口在重要场合已经抛出的事件。

【讨论】:

  • 谢谢!这个语法对吗? this.fireEvent("myCustomEvent"[,elementThatTriggeredTheEvent]);和 yourWindow.on("myCustomEvent",this.myCustomEventHandler[,scope]); ?方括号表示可选?
  • 方括号表示可选。但是您不仅限于一个参数。你可以通过你想要的。看看:docs.sencha.com/extjs/5.1/5.1.0-apidocs/#!/api/… 并搜索 fireEvent。
猜你喜欢
  • 2016-08-13
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多