最近(2.x / 3.x)我只是使用 xtype 和工厂方法来接收一个同样快速的类的实例。现在我已经开始了 4.x 和我的第一个 MVC 应用程序。如教程中所述,MVC 模式要求我为每个不想使用的视图扩展一个类,即使我只使用一次。但是 Sencha 自己写的最佳实践说:
只是为了可重用性或添加功能而扩展
在我的情况下,我需要注册一大堆类,即使它们可以从一个基类创建,除了一些参数,比如title, width,...
另一点是控制器按照约定覆盖了任何 StoreId 并且还需要严格键入,这意味着类名必须以s
. 但据我所知,我既不能保留模型也不能保留控制器存储/模型数组中的存储,因此该约定是否还有其他要点,因为它似乎没有多余的输入。
下一点是,在从 3.X 合并到 4.X 之后,应用程序的初始加载时间已经延长,这似乎是由于需要定义的许多新类或由于所有控制器在启动时都被实例化的事实造成的由于 MVC 模式的默认行为。有没有办法不自动实例化一个控制器,只是懒惰地做它,例如当我在应用程序控制器上请求它时?
是的,我知道,这是一堆问题,但我猜它们都围绕同一个主题。
编辑
经过一些源代码挖掘后,我不再确定
s
命名商店时的要求。我以为我在阅读 MVC 教程时偶然发现了这一点。任何人都可以验证这一点吗?
编辑 2
我的结论
花边渲染非常简单。首先在ApplicationController控制器数组中不应该提到Controller。要创建这样一个控制器的实例,请使用ApplicationController.getController(pureClassName)
[注意每个控制器都包含对 ApplicationController 调用的引用 application
] 现在你需要知道init(application)
方法和onLaunch(application)
方法不再被 ApplicationController 调用的事实,你需要做这个你自己。调用getController()
ApplicationController 时,首先查找内部引用缓存中是否已经存在此控制器的实例,如果没有,它会创建一个实例并将控制器名称注入为Id
. 所以控制器是一种非常好的单例。控制器本身为已注册的商店、模型和视图创建所有 getter,并且,这是一个猜测,它实例化它们(至少是商店)关于商店的命名限制,没有关于以 s 结尾的限制。