4

我正在推动这样的观点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().
4

5 回答 5

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

    }
于 2013-04-17T03:38:20.710 回答
1

我们有两种方法可以解决您的问题

首先是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);
于 2013-04-08T08:39:49.383 回答
1

您的意思是,当您按下一个按钮(或后退按钮)时,它应该跳回 2-3 个视图,而不仅仅是一个视图?

示例:遍历它去的视图 ::::

1 -> 2 -> 3 -> 4 -> 5 (设置一些条件 X) -> 6 -> (现在使用后退按钮反转) -> 5 -> 4 -> 2 (因为 3 由于条件 X 已经消失) -> 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 个视图(例如),而不是在您离开时

于 2013-04-10T18:02:32.760 回答
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-导航-查看-方法-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);
    }
于 2013-04-15T21:40:00.023 回答
-1

尝试使用拼接从数组中删除值:

var idx = this.up('navView').getItems().indexOf({xtype: 'myView'});
this.up('navView').getItems().splice(idx,1);
于 2013-04-08T08:53:00.980 回答