2

这是我的 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 中定义它们吗?(像这样:控制器[....我所有的控制器.....])还有其他方法可以在我的控制器中使用初始化功能吗?谢谢!

4

3 回答 3

4

有很多方法...

先了解一些基础知识:

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

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

重要的是要知道,当使用这种方式接收控制器实例时,getter 方法不会为调用的控制器调用init()onLaunch()方法,它只会尝试获取或创建控制器。您还应该注意这些控制器中这些方法的 API 不再正确。您需要为这些控制器设置一个 init bool 并在getController(name)方法返回给您的引用上检查它。如果它是 undefined/false 你自己调用init() / onLaunch()并在之后设置它。我自己使用这些技术来减少更大应用程序的初始负载。我猜你并不真的需要这个仅仅为少数控制器。

更新

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

于 2012-09-03T08:13:21.290 回答
0

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

例如:

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

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

于 2012-09-03T08:19:15.650 回答
0

您在应用程序中定义的控制器在调用应用程序之前加载launch()。随着每个控制器的加载,它的models,viewsstores(MVS) 也被加载。

尽管您可以在应用程序中定义 MVS,但我建议每个控制器都定义其相关的 MVS,因为程序员可以根据请求而不是默认加载控制器(及其相关的 MVS)。从可重用性的角度来看,这也是一个很好的实践(因此,如果您曾经重用控制器,您就会知道它附带了哪些 MVS)。

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

于 2012-09-03T08:23:02.823 回答