在app.js Extjs中定义控制器

时间:2012-09-03 06:51:47

标签: extjs extjs4 extjs-mvc

这是我的app.js代码:

Ext.Loader.setConfig({
    enabled: true
});

Ext.application({
    name: 'KP',
    appFolder: 'scripts/app',

    controllers: [
        'login.Login'
    ],

    views: [
        'login.Login'
    ],


    launch: function () {

        var view = Ext.widget('login')
    }


});

如果我想在我的应用程序中使用其他视图,控制器,模型和存储,我应该在app.js中定义它们吗? (像这样:控制器[....我所有的控制器......]) 还有其他方法可以在我的控制器中运行init函数吗?谢谢!

3 个答案:

答案 0 :(得分:4)

有很多方法......

首先遵循一些基础知识:

应用程序控制器的controllers数组中列出的所有控制器都在启动时实例化(应用程序使用onReady事件初始化。此外,所调用的控制器的init()onLaunch()方法也会被调用。发生这种情况时,请参阅链接的API了解详情)。现在,每个实例化的控制器初始化其存储,视图和模型(为所有人创建getter,创建每个商店的实例,同时覆盖storeId并将它们附加到Ext.StoreMgr)。请注意,每个控制器都包含自己的模型,存储和视图。

接收未在应用程序控制器中列出的控制器的最简单方法是使用应用程序控制器的引用并调用getController(name)

重要的是要知道,在使用这种方式接收控制器实例时,getter方法不会为调用的控制器调用init()onLaunch()方法,它只会尝试获取控制器或者创造它。您还应该注意这些控制器中这些方法的API不再正确。您需要为这些控制器设置一个init bool,并在getController(name)方法返回给您的参考上进行检查。如果未定义/错误,请自行调用init() / onLaunch()并在此之后设置。我自己使用这些技术来减少初始负载以适应更大的应用。我想你并不只是需要一些控制器。

  

<强>更新

     

由于4.1.x版本中的一些更改,不再需要初始化控制器   手动。现在, getController 方法

为我们完成了这项工作

答案 1 :(得分:0)

您可以根据需要定义任意数量的控制器。要实现层次结构,您可以定义与其中的某个控制器相关的视图和存储。

例如:

controller/
  artists.js (inside: artistsView1.js, artistsView2.js, artistsStore.js)
  paintings.js (inside: paintingsView1.js, paintingsStore.js)

控制器中使用的所有视图和存储都将被加载并初始化Applocation加载。

答案 2 :(得分:0)

在调用应用程序launch()之前加载您在应用程序中定义的控制器。在加载每个控制器时,还会加载modelsviewsstores(MVS)。

虽然您可以在应用程序中定义MVS,但我建议每个控制器定义其相关的MVS,因为程序员可以根据请求而不是默认情况下加载控制器(及其相关的MVS)。从可重用性的角度来看,这也是一个很好的做法(因此,如果您重用控制器,您就知道MVS带来了什么)。

如果在没有控制器的情况下使用它们,您可能希望在应用程序中包含一些视图,例如,如果系统中存在某些错误,则会显示某种自定义窗口。