【问题标题】:Define controllers in app.js Extjs在 app.js Extjs 中定义控制器
【发布时间】:2012-09-03 06:51:46
【问题描述】:

这里是我的 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 功能吗?谢谢!

【问题讨论】:

    标签: extjs extjs4 extjs-mvc


    【解决方案1】:

    有很多方法...

    先了解一些基础知识:

    应用程序控制器的控制器数组中列出的所有控制器在启动时都会被实例化(应用程序会使用 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 方法为我们完成

    【讨论】:

    • 谢谢!大型应用程序确实需要它。
    • @Oleg 不客气!我知道,因为我自己使用它的一个变体来减少初始负载:)
    • @sra,很好的答案,我投了赞成票。我正在使用相同的方法。以及如何sencha build 动态加载控制器(使用getController(name) 创建)?
    • @bhovhannes 谢谢。对你的问题;我不使用sencha build 工具,但您应该可以在应用程序上使用requires 或uses 将其存档。两者都应该强制工具包含这些类。
    • @sra,我对此提出了一个新问题:stackoverflow.com/questions/14457508/… 请看一下
    【解决方案2】:

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

    例如:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多