如何从sencha touch中的导航堆栈中删除特定视图?

时间:2013-04-08 07:25:22

标签: extjs navigation sencha-touch sencha-touch-2

我正在推动像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().

5 个答案:

答案 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);