如何从导航堆栈在煎茶触摸删除特定视图?(How to remove particular view

2019-08-20 05:49发布

我推的观点是这样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().

Answer 1:

推景观查看天气之前的观点已经存在,并摧毁它,如果它已经存在,所以你不会得到这些警告,并可以轻松导航。

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',

    }


Answer 2:

我们为您问题的两种方法

首先是RemoveAt移除

Removes the Component at the specified index:

myNavigationView.removeAt(0); //removes the first item

二是删除

remove( item, destroy ) : Ext.Component1
Removes an item from this Container, optionally destroying it
myNavigationView.remove('ChildComponent ItemId here in single quotes',true);


Answer 3:

你的意思是,当你按下一个按钮(或者后退按钮)应该跳回说2-3的意见,而不是仅仅一种观点认为,?

例如:遍历是不言而喻的意见::::

1 - > 2 - > 3 - > 4 - > 5(设置一些条件X) - > 6 - >(现逆转使用后退按钮) - > 5 - > 4 - > 2(因为3已经消失由于条件X ) - > 1。

如果这是你的意思,那么你可以通过侦听在navView“返回”事件扩大在控制器中的后退按钮功能。 然后,一旦你得到的情况下,您就可以在导航视图的项目数,并据此决定弹出1个或2或3个事件,因此由要么1-2-3等观点向后跳跃。 对于用户来说,这将使它看起来像导航视图弹出(在上面的例子)图3,当你达到视图5。

代码如下::

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次(说),而不是同时找你



Answer 4:

第一件事: 不要使用navigationview删除或RemoveAt移除! 删除和RemoveAt移除来自集装箱的方法( http://docs.sencha.com/touch/2.2.0/source/Container3.html#Ext-Container-method-remove )。 当您使用navigation.pop(X)的对象做内部元素的计数,当您使用删除/ RemoveAt移除不会发生。 所以,你可能有一些麻烦,如“后退按钮”在第一页显示,因为删除未更新计数( http://docs.sencha.com/touch/2.2.0/source/View2.html#Ext-导航-视图-方法-doPop )。

现在关于你的问题:使用弹出(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);
    }


Answer 5:

尝试从使用拼接阵列移除值:

var idx = this.up('navView').getItems().indexOf({xtype: 'myView'});
this.up('navView').getItems().splice(idx,1);


文章来源: How to remove particular view from navigation stack in sencha touch?