我应该如何延迟加载ExtJS MVC控制器、视图、存储和模型
How should I lazy-load Ext JS MVC controllers, views, store, and models?
我们使用ExtJS MVC作为插件/主机架构的前端技术,其中存在一个主机,并且可以通过xcopy轻松安装多个插件。每个插件都有一个ExtJS应用程序,每个插件都在页面加载时注册自己。整个应用程序是一个单页应用程序(SPA(。
我们现在遇到的主要问题是,我们安装了10多个插件,每个插件至少有10个控制器,以及50多个视图、商店和模型。因此,当我们刷新页面(F5(时,我们应该坐下来等待大约30秒,以便接近200个HTTP请求到达服务器,并返回接近3兆字节的响应。
虽然已经应用了缓存,但这根本不可取。甚至不是第一次。我想即使是一个外行也会接受这样的论点,即要想得到一些牛奶,你不应该等到农场、奶牛、谷仓、房子、道路、电力、河流等建成。
这个问题的确切答案必须是控制器、视图、存储和模型的延迟加载。然而,我们不清楚我们必须做些什么才能做到这一点,而且我们在网上也找不到一个好的、适用的答案。大多数讨论只是关于延迟加载的要求,但他们没有提到如何。例如,看看这个链接:
http://www.sencha.com/forum/showthread.php?130449-大型单页架构-ExtJS-4.0
或者这个:
http://www.sencha.com/forum/archive/index.php/t-156694.html?s=aaeec1ce30acbc9cbd2615afadec982f
如果我们使用Ext.require
方法,那么我们只将控制器加载为简单的JavaScript文件,它们不会进入它们的层次结构来加载它们的存储、视图和模型。我们已经对此进行了测试。
另一方面,我们在ExtJS上找不到getController()
和ControllerManager
。似乎他们已经在ExtJS 4.1.3上消失了。
关于如何根据URL参数动态加载控制器的任何想法(我们可能需要一个路由引擎来解析URL并动态加载控制器(。即使是一篇有充分文档记录的文章或带有代码示例的论坛讨论也可以帮助我们。
对于您的问题,您应该在菜单点击等事件上加载控制器文件。使用外部要求。之后,你应该初始化你的控制器。
我阅读了ExtJs的源代码,并在下面实现了一个自定义的惰性负载控制器。
// this should run first time your application start
Ext.application({
name: 'AppName',
appProperty: 'appProp'
});
// below lines should run when you want to load controllers
// (for ex on menuitemclick)
var controllers = ['yourController', 'anotherController'];
Ext.require(controllers, function () {
for (i = 0; i < controllers.length; i++) {
var controllerName = controllers[i].substr(controllers[i].lastIndexOf(".") + 1);
if (!AppName.appProp.controllers.get(controllerName)) {
var controller = Ext.create(controllers[i], {
application: AppName.appProp,
id: controllerName
});
controller.init(AppName.appProp);
}
}
});
您尝试过Ext.create((吗?
http://docs.sencha.com/extjs/4.2.0/#/api/Ext方法创建
这个方法将动态加载.js文件,看起来效果很好。然而,似乎应该有一种更清洁的方法来做到这一点。
至少在4.2.0中,这是可用的。从构建应用程序教程。。。
在较大的应用程序中,您可能希望在运行时加载其他控制器。您可以使用getController方法来完成此操作。在运行时加载其他控制器时,必须记住手动调用加载的控制器上的init方法。
someAction: function() {
var controller = this.getController('AnotherController');
// Remember to call the init method manually
controller.init();
}
以下是指向Ext.app.Application
的此功能的文档的链接。
- 我该如何编写一个CouchDB视图,列出每个存储文档的大小
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- ExtJS 4.2如何获取视图的所有存储
- 在 React JS 中,什么时候应该使用存储而不是直接操作视图的状态
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 如何在网页上存储记录 (json) 并仅在“视图”上的记录上显示
- 我们如何在 javascript 对象中使用字符串名称存储创建 Backbone 视图的实例
- 使用存储在App_Data中的Json数据,使用JavaScript和ASP.NET MVC在谷歌地图视图上显示
- 将当前视图存储在 Cookie 中
- 将存储负载从视图更改为控制器 ExtJS4
- 如何使用外部存储呈现数据视图的 tpl
- 通量:顶层视图不应该是“;转储”;(不要从存储中获取数据)
- 如何在Rails视图控制器中访问HTML5本地存储
- 我需要使用一个服务来跨多个视图存储、保存和提供可用的数据
- 在 React.js 应用程序中,API 调用在存储中失败,我如何将其传输回视图
- 使用HTML5本地存储保存视图状态
- 将本地存储认证令牌状态与视图同步
- React和Flux -如何绑定视图来存储数据
- 在Ionic框架(Phonegap)中正确地在视图之间存储变量
- 在Sencha Touch 2中动态定义和加载带有不同代理存储的视图