是否可以将 Ext.Component 声明为全局变量
Is it possible to declare Ext.Component as global variables?
我在优化我的Sencha Touch 2应用程序时多次遇到这个问题。
很明显,我应该保持 DOM 轻量级,我的应用程序包含一个Ext.TabBar
和一个上面的主Ext.Container
。每次从一个视图切换到另一个视图时,我只需删除当前视图并向该容器添加新视图即可。
但问题是,有些视图具有自定义数据。我的意思是他们有内部数据,例如 html 内容、过滤的商店记录等。当我从主容器中删除它们时,我想以某种方式将它们的"状态"保存到全局变量中,例如:我正在做一个电子商务应用程序,其中包含带有详细信息的产品。从主容器中删除详细信息面板时,我想做这样的事情:
var saved_detail_panel = mainContainer.getActiveItem();
如果我能做到这一点,以后当我想将该详细信息面板添加回主容器时,我可以简单地使用:
mainContainer.add(saved_detail_panel);
我已经尝试了很多次,但还没有找到一个有效的。
非常感谢任何帮助。谢谢。
更新:当我将此代码放在控制器的事件处理程序中时:
var temp = Ext.create('taxi.view.location.LocationPanel', {showAnimation: null});
taxi.main_container = temp;
它运行良好,但性能不佳。我想做的是只在我的应用程序中创建一次.js,如下所示:
launch: function(){
var temp = Ext.create('taxi.view.location.LocationPanel', {showAnimation: null});
};
并且仅在控制器中使用它:
taxi.main_container = temp;
它是第一次工作。但在第二次中,它显示此错误:
Uncaught TypeError: Cannot call method 'replaceCls' of null
您可以使用应用程序的"全局命名空间"吗? 然后,您可以在应用程序中的任何位置引用MyApp.savedValue?
Ext.application({ 名称:"我的应用",观看次数: [],型号: [],商店: [], 控制器:["主"], 启动: 函数() { MyApp.savedValue = "Hello word"; Ext.Viewport.add(Ext.create('Sencha.view.tablet.MainView')); }});
Sencha示例中的另一个想法是在KitchenSink演示中。 在 app/controllers/Main.js 中,它们使用视图缓存,该缓存在 config:{} 中设置并通过 getter/setter 访问。 我认为主控制器始终存在,因此您的缓存始终可用。 事实上,如果将它们加载到应用程序中,不是所有控制器都会保留吗.js?
控制器: ['主', 'FooController', 'BarController'],
代码段来自:应用/控制器/主.js
配置:{ /** * @private */ viewCache: [],//通过 getViewCache(), setViewCache() 访问 ...}, 创建视图: 函数(名称) { var cache = this.getViewCache(),//Implied getter ln = cache.length, 限制 = 20,//要缓存的最大视图数 视图,我,旧视图; 查看视图是否已在缓存中并将其返回 Ext.each(cache, function(item) { if (item.viewName === name) { 视图 = 项目; 返回; } },这个); 如果(查看){ 返回视图; } 如果我们已经达到缓存限制,请删除某些内容 if (ln>= limit) { for (i = 0; i <ln;>
试试这个,
var appNS = new Ext.application({
name: 'app',
//others
launch: function () {
appNS.SavedValue = 'getting start..........';
},
//others
});
然后你可以在控制器内部使用它
console.log(appNs.SavedValue);
我希望这可能会有所帮助。
另一个 soln 是缓存您的视图。 它实际上不是缓存。首先向应用程序添加一个数组,例如 .
Ext.application({
name: 'app',
viewCache: [],
viewCacheCount: 0,
launch: function () {
this.viewCache.push("app init......."); // push your view
}
});
这可以在任何控制器内部检索,例如
ths.getApplication().viewCache.pop(); //pop your view
我不知道在某些可自动销毁的视图/组件的情况下可能会产生一些问题。
尝试在视图中添加autoDestroy: false
。
Ext.define('JiaoJiao.view.personal.Card', {
extend: 'Ext.NavigationView',
xtype: 'personalContainer',
config: {
tab: {
title: '个人',
iconCls: 'user',
action: 'personalTab'
},
autoDestroy: false,
items: [
{
xtype:'personal',
store: 'Personals'
}
]
}
});
- 如何将变量声明为全局变量
- 如何将变量声明为全局变量?用case foreach?Javascript
- 返回语句后的函数声明全局变量不会被覆盖
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- JavaScript 全局变量声明
- 如何从选择菜单选项动态声明全局变量
- 让 javascript 将(默认情况下)未声明的变量声明到当前本地范围(基于首次使用)而不是全局范围
- 声明全局变量
- 由全局范围内的 Web 应用程序声明的全局变量
- 是否有任何选项可以在煎茶触摸中声明全局变量
- 如何将值从一个函数传递到另一个具有对象的函数,而无需在 JS 中声明全局变量
- 如何在不声明全局变量的情况下将值从一个函数传递到另一个函数?
- 如何从函数内部声明全局变量
- 在页面初始化时声明全局变量
- 如何在javascript中正确声明全局变量
- 是否可以在Node/Express 4.0中声明全局变量?
- Javascript:在一个脚本中声明全局变量,并在另一个脚本中使用它
- 如何使用JS声明全局变量
- 在 .js 文件中声明全局变量是否不好
- 如何在外部js文件中声明全局变量?