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

まず、ナビゲーション ビューで 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

問題には2つの方法があります

最初はremoveAtです

Removes the Component at the specified index:

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

2番目は削除です

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

ボタン (または戻るボタン) を押すと、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 つのビューのみをポップし、移動中はポップしないようにする方法)

于 2013-04-10T18:02:32.760 に答える
-1

splice を使用して配列から値を削除してみてください。

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