this.getMainview().destroy();
似乎Mainview被删除但我收到错误:
Uncaught TypeError: Cannot read property 'dom' of null
所以我想.destroy() - 方法有什么问题或是否有更好的方法来处理这个问题?
答案 0 :(得分:6)
在移至新视图之前,您可以调用以下代码来删除当前视图
Ext.Viewport.remove(Ext.Viewport.getActiveItem(), true);
或者您也可以提供项目对象而不是ActiveItem
答案 1 :(得分:5)
我以前多次都遇到过这个问题。目前看来,在Sencha Touch 2中没有高效且实际上无错误的解决方案。当第二次再次添加视图时,将再次显示该不愉快的错误。
可能的解决方案:
此代码段:
your_container(your_container.getActiveItem(), false);
实际上不会从内存中破坏您的子组件,而是从DOM中删除。稍后当你添加它时,就没有错误(正如我测试的那样)。
希望它有所帮助。
答案 2 :(得分:0)
我会揭露我的情况以及我是如何解决它的。
我有一个带有图标的TabPanel。其中一个选项卡显示项目列表。当您点击某个项目时,您将被带到显示其描述的新面板。如果单击“后退”按钮,该面板将被销毁并返回到“列表”。这样你就可以破坏"描述"面板现在没用了。
所以我所做的是创建一个函数来实例化描述面板,具体取决于所点击的项目的索引:
function project(i) {
var v;
switch(i) {
case 0:
v = Ext.create( 'Ext.Panel', {
title: 'title',
layout: { type: 'fit' },
id: 'project0',
iconCls: '',
style: '',
html: 'my html'
});
break;
}
return v;
}
现在,在' itemtap'列表的事件我有这个:
var lastItem = container.add(project(i));
itemsList.hide(); //hide the List and display only the new Panel in the container
现在,标题中有一个按钮可以返回上一个视图(即列表),这就是事件'点击'那个按钮:
container.remove(lastItem, true); //hide and destroy it
itemList.show(); //show the List again
因此,如果我在List和Description项目(Panels)之间来回走动,那么每次点击它们时我都会得到一个新实例,并且当我返回时它会被摧毁。
这解决了我的问题。