Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以将Ext.Component声明为全局变量?_Javascript_Sencha Touch 2 - Fatal编程技术网

Javascript 是否可以将Ext.Component声明为全局变量?

Javascript 是否可以将Ext.Component声明为全局变量?,javascript,sencha-touch-2,Javascript,Sencha Touch 2,在优化我的Sencha Touch 2应用程序时,我多次遇到这个问题 很明显,我应该保持DOM的轻量级,我的应用程序包含一个Ext.TabBar和上面的一个主Ext.Container。每次从一个视图切换到另一个视图时,我只需删除当前视图并向该容器添加新视图 但问题是,有些视图具有自定义数据。我的意思是,它们有内部数据,如html内容、筛选的商店记录等。当我将它们从主容器中删除时,我想以某种方式将它们的“状态”保存到一个全局变量中,例如:我正在使用带有详细信息的产品制作一个电子商务应用程序。从主

在优化我的Sencha Touch 2应用程序时,我多次遇到这个问题

很明显,我应该保持DOM的轻量级,我的应用程序包含一个
Ext.TabBar
和上面的一个主
Ext.Container
。每次从一个视图切换到另一个视图时,我只需删除当前视图并向该容器添加新视图

但问题是,有些视图具有自定义数据。我的意思是,它们有内部数据,如html内容、筛选的商店记录等。当我将它们从主容器中删除时,我想以某种方式将它们的“状态”保存到一个全局变量中,例如:我正在使用带有详细信息的产品制作一个电子商务应用程序。从主容器中移除“详细信息”面板时,我希望执行以下操作:

var saved_detail_panel = mainContainer.getActiveItem();
launch: function(){
var temp = Ext.create('taxi.view.location.LocationPanel', {showAnimation: null});
};
如果我能做到这一点,稍后当我想将该细节面板添加回主容器时,我可以简单地使用:

mainContainer.add(saved_detail_panel);
我试了很多次,但还没有找到一个有效的

非常感谢您的帮助。多谢各位

已更新: 当我将此代码放入控制器中的事件处理程序时:

var temp = Ext.create('taxi.view.location.LocationPanel', {showAnimation: null});
taxi.main_container = temp;
taxi.main_container = temp;
它运行良好,但性能不佳。我想做的事情是只在我的app.js中创建一次,如下所示:

var saved_detail_panel = mainContainer.getActiveItem();
launch: function(){
var temp = Ext.create('taxi.view.location.LocationPanel', {showAnimation: null});
};
并且仅在控制器中使用此选项:

var temp = Ext.create('taxi.view.location.LocationPanel', {showAnimation: null});
taxi.main_container = temp;
taxi.main_container = temp;
这是第一次奏效。但是在第二次,它显示了这个错误:

Uncaught TypeError: Cannot call method 'replaceCls' of null 
你能使用应用程序的“全局名称空间”吗?然后您可以在应用程序中的任何位置引用MyApp.savedValue

Ext.application({ name: 'MyApp', // views: [], // models: [], // stores: [], controllers: ['Main'], launch: function() { MyApp.savedValue = "Hello word"; Ext.Viewport.add(Ext.create('Sencha.view.tablet.MainView')); } }); 外部应用程序({ 名称:“MyApp”, //视图:[], //型号:[], //门店:[], 控制器:['Main'], 启动:函数(){ MyApp.savedValue=“Hello word”; 添加(Ext.create('Sencha.view.tablet.MainView'); } }); Sencha示例中的另一个想法是厨房水槽演示。在中,它们使用视图缓存,该缓存在config:{}中设置,并通过getter/setter访问。我认为主控制器始终存在,因此缓存始终可用。事实上,如果你的所有控制器都加载到app.js中,它们不是都会持久存在吗

controllers: ['Main','FooController', 'BarController'], 控制器:['Main','FooController','BarController'], 以下代码片段:

配置:{ /** *@私人 */ viewCache:[],//通过getViewCache()和setViewCache()访问 ... }, createView:函数(名称){ var cache=this.getViewCache(),//隐含的getter ln=cache.length, limit=20,//要缓存的最大视图数 视图,i,oldView; //查看视图是否已在缓存中并返回它 Ext.each(缓存、函数(项){ 如果(item.viewName==名称){ 视图=项目; 返回; } },这个); 如果(视图){ 返回视图; } //如果已达到缓存限制,请删除某些内容 如果(项次>=限制){ 对于(i=0;i
var appNS = new Ext.application({

    name: 'app',
    //others

    launch: function () {    
        appNS.SavedValue = 'getting start..........';       
    },

    //others

});
然后您可以在控制器内部使用它

console.log(appNs.SavedValue);

我希望这可能会有所帮助。

另一个解决方案是缓存您的视图。它实际上不是缓存。 首先向应用程序中添加一个数组,如

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'
         }
     ]
 }
});

我尝试过很多次,但不幸的是,全局名称空间不起作用。它总是导致错误,无法直接更新。顺便问一下,你能解释一下有关
viewCache
的更多信息吗?我已经试着扩展到目前为止我所知道的内容。我也需要在某个时候弄清楚这一点。我认为您在开发方面领先了一点。请查看我的最新问题,这确实是我以前多次遇到的问题,我感到非常沮丧..不知道是否是像这样的ST2错误:。。。我在sencha-touch-all-debug.js中看到了大约20个replaceCl调用,你能看到从Chrome stacktrace调用的是哪一个吗?糟糕的是,我没有足够的耐心来回溯和调试这些核心源代码:(…即使我现在已经找到了解决方法,通过使用这样的方法:
mainContainer.add({xtype:'LocationPanel',showAnimation:null});
Chrome开发工具中仍然显示了一个奇怪的错误:
未捕获的TypeError:无法读取null的属性“dom”
不幸的是,这是局部变量,而不是全局变量