【问题标题】:Ext JS 4.2.1 loading controller - best practiceExt JS 4.2.1 加载控制器 - 最佳实践
【发布时间】:2013-06-24 16:20:26
【问题描述】:

我目前正在开发一个带有许多视图/控制器/...的 Ext JS 应用程序 我想知道加载 JS 控制器/视图/等等的最佳实践是什么......

目前我的应用程序定义如下:

// enable javascript cache for debugging, otherwise Chrome breakpoints are lost
Ext.Loader.setConfig({ disableCaching: false });

Ext.require('Ext.util.History');
Ext.require('app.Sitemap');
Ext.require('app.Error');


Ext.define('app.Application', {
    name: 'app',

    extend: 'Ext.app.Application',

    views: [
        // TODO: add views here
        'app.view.Viewport',
        'app.view.BaseMain',
        'app.view.Main',
        'app.view.ApplicationHeader',

        //administration
        'app.view.administration.User'
         ...
    ],

    controllers: [
        'app.controller.Viewport',
        'app.controller.Main',
        'app.controller.ApplicationHeader',

        //administration
        'app.controller.administration.User',
        ...
    ],

    stores: [
        // stores in there..
    ]
});

这会以某种方式强制客户端在启动时加载我所有的视图和控制器,并且当然会调用所有控制器的所有 init 方法。 每次更改视图时,我都需要加载数据。现在我无法将其加载到控制器的 init 函数中。我假设我必须做这样的事情:

init: function () {
    this.control({
        '#administration_User': {
            afterrender: this.onAfterRender
        }
    });
},

有没有更好的方法来做到这一点?还是只是其他事件?

虽然我质疑自己的主要问题是在启动时加载所有 javascript 是否是最佳做法。只加载客户端现在确实需要的控制器/视图/...不是更好吗?或者我应该在启动时加载所有 JS?

如果我确实想动态加载控制器,我该怎么做?我假设必须从我的应用程序数组(视图、控制器、存储)中删除它们并创建一个实例,如果我确实需要它并在控制器 init 中设置视图?!

最佳做法是什么??

更新

deftJS 及其视图控制器会是一个不错的选择吗? deftJS 的主要优缺点是什么?

【问题讨论】:

    标签: javascript extjs extjs4.2 dynamic-loading deftjs


    【解决方案1】:

    您可以在启动时加载所有控制器。请参阅下面的链接,测试了 1000 个控制器,速度很快:

    Best practices for initializing and deconstructing controllers

    快速应用程序的最佳选择是使用 sencha cmd 将所有必需的文件最小化并压缩到一个文件中。

    您不应该将数据加载到 init 中的视图中,因为尚未加载 ui,如果您愿意,可以在 onLoad 上加载。

    我会在afterrenderactivated 事件中加载视图的数据。

    理想情况下,您将使用模块化方法,在需要该模块的控制器、视图和模型的模块上调用 init() 方法。

    【讨论】:

    • 在您对链接帖子的回答中,用户 catalinux 写了一些关于 DeftJS 的内容。尽管它对我来说是新的,但我对它进行了一些研究。它的主要优点/缺点是什么?使用 DeftJS 有什么缺点吗?
    • 我喜欢 Deft 的 IoC 和延迟/承诺,但我认为他们搞砸了 MVC 的选择器。例如,您不能使用 Deft 选择表单中的所有字段,但可以使用常规 extjs mvc。
    • @NeilMcGuigan 我刚刚开始使用 DeftJS,我可以告诉你最后一条语句(不能使用复杂的选择器)不是真的。但是,选择器的范围仅限于受控视图的子项。哪个 IMO 是一件非常好的事情:常规的 ExtJS 允许您从任何控制器中选择任何东西,这为创建隐藏的依赖关系敞开了大门。对我来说,ExtJS 的“MVC”设计得很糟糕,而 DeftJS 最终为 Ext 应用程序的架构带来了一些意义。
    • @RIAstar 。看起来他们在上一个版本中做了一些更改。仍然不确定如何选择表单中的所有文本字段。你知道怎么做吗?
    • 我认为它一直存在,只是在文档中可能更难找到。您可以在"Accessing views" wiki page(最后一个代码块)底部附近找到一个示例。类似于control: { textfields: { selector: 'textfield', listeners: { change: 'handleChange' } } }
    猜你喜欢
    • 2011-11-28
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多