在Extjs应用程序中,控制器如何与MVC一起使用

对于Extjs来说,我很新,在浏览一些关于Extjs MVC模式的教程和博客之后,我不清楚如何在extjs平台上构建一个复杂的应用程序(比如10 - 15页导航)。

在sencha论坛中,建议所有的控制器都需要在app.js中预先定义(因为与加载DOM的UI相比,手动加载控制器不会有性能问题,请注意,这是由sencha论坛提及的经理)。

通过以上方法,我有几个问题:

  • 什么时候一个控制器被实例化? 当应用程序加载时,它们是否全部加载并安装,并且一直监听它们中定义的事件,直到应用程序的整个生命周期?

  • 在控制器类中定义Models [],Stores []和Views []是什么意思? 他们什么时候加载并实例化?

  • 页面导航如何与控制器一起工作? 如果导航到新页面仅转换为getParentContainer.remove(componentX)和getParentContainer.add(componentY),那么控制器的目的仅仅是处理事件的文件?

  • 控制器是否有任何范围(实例化>销毁)? 如果不是如何创建和销毁多个实例,以便我的行为不会被错误的实例监听(我见过一些提到控制器的博客大多是单例)?

  • 有人可以指出这一点吗? 任何示例/插图都会有很大的帮助。

    谢谢


    在Ext JS中,Ext.app.Controller类(开箱即用)通过应用程序的初始化实例化。 事实上,控制器的init()在应用程序本身的launch()之前被调用。 所以是的,控制器是“生命力”,从应用程序在应用程序的整个生命周期开始的那一刻开始监听。 有动态创建和销毁控制器的方法,但这需要定制实现。

    但是,在Ext JS 5中引入了ViewController的概念。 它扩展了与Ext.app.Controller相同的基础(Ext.app.BaseController),但与上面不同,ViewController与绑定的视图实例一起创建和销毁。 这是由框架自动处理的 - 不需要定制的实现以使其工作。

    关于models:[],stores:[]和views:[],这些对于控制器来说基本上是require(),指示它确保这些类被加载。 这些约定仅仅是要求这些类从它们的特定名称空间(例如,AppName.view,AppName.store等)的简写方式。 在视图和商店的情况下,这个约定也会为所需的类生成getters。

    关于导航,这取决于你。 有很多方法可以创建您的Ext JS应用程序。 你可以做“单页”应用程序,其中的导航可能类似于你提到的非常密切(我的很多)。 您还可以创建多页面应用程序,这些应用程序可以为网站提供更传统的页面到页面的感觉,但是会根据每个页面的需求为每个页面利用通用代码和类。

    最后,关于听众碰撞问题,答案是“视情况而定”。 如果你使用的是Ext JS 4,你只有“lifer”控制器,所以避免在监听器中发生冲突是一个非常了解你在listen()或control()部分中使用的选择器的问题,确保您不会复制监听器(通过显式复制或者选择器过于广泛),除非您想要这么做。 但是,对于Ext JS 5,ViewController概念或多或少地消除了这种担忧,因为ViewController的“监听”域被限制在绑定的视图实例上。

    就例子而言,我一定会鼓励你从Ext JS 5的文档开始:

    http://docs.sencha.com/extjs/5.0/whats_new/5.0/whats_new.html

    http://docs.sencha.com/extjs/5.0.1/

    “什么是新的”文档有一些真正伟大的架构讨论,这些讨论比这些概念的细节更深入地超越了SO的可行性。

    链接地址: http://www.djcxy.com/p/76401.html

    上一篇: How are Controllers used with MVC in Extjs application

    下一篇: Extjs MVC nested views events and async function