gpt4 book ai didi

ExtJS 应用程序事件问题

转载 作者:行者123 更新时间:2023-12-04 12:41:42 30 4
gpt4 key购买 nike

EXTJS 4.1

我遇到了一些难题,很想听听其他开发人员在这个场景中关于 ExtJS 事件和 Controller 方法的意见。我知道这个话题已经被多次讨论和讨论过,但我觉得它可以使用更多的钻研。

按照标准做法,我在 Controller 的 init() 中定义事件监听器。方法声明如下:

Ext.define("My.controller.Awesome", {
init: function(application){
/** Observe some Views */
this.control({
'my-awesome-view #saveButton':{
click: this.saveMyData
}
});

/** Listen for Events, too! */
this.on({
showAwesomeView: this.showMyAwesomeView
});

/** Application events, what fun! */
this.application.on({
showThatAwesomeView: this.showMyAwesomeView
});
}

现在,当我愉快地在其他 Controller 中编写一些功能时,我发现自己需要调用 showMyAwesomeViewMy.controller.Awesome .我可以通过几种不同的方式做到这一点......
Ext.define("My.controller.Other", {

/* ... class definition */

someImportant: function(){

// I can do this (Approach #1)
this.application.getController("Awesome").showMyAwesomeView();

// Or I can do this (Approach #2)
this.application.getController("Awesome").fireEvent("showAwesomeView");

// Last but not least, I can do this (Approach #3)
this.application.fireEvent("showThatAwesomeView");
}
});

对我来说,方法#3 感觉 最“正确”。我的问题是,如果我没有实例化 My.controller.Awesome之前, init()方法尚未运行,因此没有建立监听器,因此触发的事件进入神秘之地,再也不会被听到。

我重载了 Ext.application.getController()调用 controller.init()返回前 controller ,因此 Controller 有它的 init方法在加载后立即调用(通常作为另一个 Controller 中的依赖项)。 这很糟糕吗?

为了节省加载时间(我的应用程序很大),我的 Controller 及其依赖项会根据需要加载。因此,当我的应用程序首次启动时,我的大多数 Controller (以及 View 和数据存储)都没有被实例化 因此不是 init()'ed 这使得触发应用程序范围的事件非常麻烦。

我觉得我可能在这里遗漏了一些重要的东西,或者我只需要硬着头皮确保我的 Controller 在触发事件之前已经被初始化。我想我也可以在主应用程序文件中放置绝对数量惊人的事件监听器,并在相应地调用它们的方法之前处理初始化 Controller ,但这似乎非常草率且难以维护。

任何意见将不胜感激,感谢您的宝贵时间!

最佳答案

方法 #3 (this.application.fireEvent('showThatAwesomeView')) 是一个很好的解决方案。应用程序事件的使用导致 Controller 不假设可以从与此事件相关的应用程序中添加或删除哪些其他逻辑。

关于您对 Controller 已及时实例化以正确绑定(bind)到事件的担忧,使用 Ext.app.Application Controller 将消除这种情况。 App Controller 在 App 初始化时初始化所有指定的 Controller 。您注意到与 Controller 数量相关的启动时间问题。我曾开发过许多单页应用程序,在某些情况下,这些应用程序具有数十个甚至数百个 Controller 。将任何初始化逻辑保持在最低限度应该可以减少任何明显的减速。代替按需加载的精简和组合脚本效果很好,可以保持应用程序的快速启动。

避免使用 getController 方法是一种很好的做法。当使用应用程序事件代替将 Controller 彼此紧密耦合的逻辑时,应用程序逻辑往往会更好地组织。

关于ExtJS 应用程序事件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525905/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com