我正在推动像this.up('navView').push({xtype: 'myView'})
如何删除位于导航堆栈中间的特定视图?
至少我应该摆脱这个警告
[WARN][Ext.Component#constructor] Registering a component with a id (listxyz) which has already been used. Please ensure the existing component has been destroyed (Ext.Component#destroy().
答案 0 :(得分:5)
在推送视图之前检查天气视图已经存在,如果已经存在则将其销毁,因此您不会收到这些警告并且可以轻松导航。
if(Ext.getCmp('myView')){
Ext.getCmp('myView').destroy();
}
//Push myView
where myView should be the id of that view declared in config of that view
config: {
id:'myView',
}
答案 1 :(得分:1)
我们有两种方法可以解决您的问题
首先是removeAt
Removes the Component at the specified index:
myNavigationView.removeAt(0); //removes the first item
其次是remove
remove( item, destroy ) : Ext.Component1
Removes an item from this Container, optionally destroying it
myNavigationView.remove('ChildComponent ItemId here in single quotes',true);
答案 2 :(得分:1)
您的意思是,当您按下按钮(或后退按钮)时,它应该跳回来说2-3个视图,而不是只有一个视图?
示例:遍历视图::::
1 - > 2 - > 3 - > 4 - > 5(设置一些条件X) - > 6 - > (现在使用后退按钮反转) - > 5 - > 4 - > 2(因为条件X已经消失了3) - > 1.
如果这就是你的意思,那么你可以通过在navView中监听“后退”事件来扩展控制器中的后退按钮功能。然后,一旦您获得该事件,您可以检查导航视图中的项目数,并相应地决定弹出1或2或3个事件,因此可以通过1-2-3等视图向后跳转。对于用户来说,当您到达视图5时,这似乎会使导航视图(在上面的示例中)弹出视图3。
代码如下::
back : function(){
if(condition=="X"){
//so if your 5th view (say) set some condition, then when you try to pop, instead of popping one, it will pop 3 views (say).
Ext.getCmp('navView').pop(3);
}
}
如何找出哪个视图正在停用(这样您只有在离开视图5后才会弹出3个视图(比方说)而不是在您
之后答案 3 :(得分:1)
首先:不在导航视图中使用remove或removeAt! remove和removeAt是Container(http://docs.sencha.com/touch/2.2.0/source/Container3.html#Ext-Container-method-remove)中的方法。当您使用navigation.pop(X)时,该对象会对内部元素进行计数,当您使用remove / removeAt时不会发生这种情况。所以你可能会遇到一些问题,比如第一页显示的“后退按钮”,因为删除没有更新计数(http://docs.sencha.com/touch/2.2.0/source/View2.html#Ext-navigation-View-method-doPop)。
现在关于你的问题:使用pop(X)。你可以在弹出之前查看页面,所以你不会有任何警告。
在我的应用程序中,我有一个按钮可以返回导航的第一页。
var ctx = Ext.getCmp('navView');
var pages = ctx.getInnerItems().length -1;
if(pages > 0){
ctx.pop(pages);
}
因此,您可以检查用户是否在“X”页面中或检查比较最后一项:
// compare with the position
var ctx = Ext.getCmp('navView');
var pages = ctx.getInnerItems().length -1;
if(pages == 5){
ctx.pop(2);
}
//OR compare with the last object
var ctx = Ext.getCmp('navView');
var innerElements = ctx.getInnerItems();
var pages = ctx.getInnerItems().length -1;
if(innerElements[pages].config.xtype == "myXtypeClass"){
ctx.pop(2);
}
答案 4 :(得分:-1)
尝试使用splice从数组中删除值:
var idx = this.up('navView').getItems().indexOf({xtype: 'myView'});
this.up('navView').getItems().splice(idx,1);