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