2012-01-09 1 views
1

私はいくつかのビューをプッシュしたExt.navigation.Viewを持っています。特定のユーザーとの対話では、ナビゲーションビューのトップレベルに直接戻る必要があります。これは、iOSのUINavigationControllerのpopToRootViewControllerAnimated:と同じです。Sencha Touch Ext.navigation.View to pop to root

私は次のようにいろいろなことを試してみました:

while(navigationView.getItems().getCount() > 1) 
    navigationView.pop(); 

while(navigationView.canPop()) 
    navigationView.pop(); 

どちらの作品。最初の例は、あまりにも驚くべきことではない無限ループに私を入れているようです。 2番目の例では、1つのビューが表示されないようです。

質問:Sencha TouchのExt.navigation.View(バージョン2の開発者プレビュー)のルートビューにポップする正しい方法は何ですか?

答えて

9

これを達成するための中間の多数の方法がありました。

私が使用していたものは、あなたが今まで持っていたレベルの数よりも高い数字をポップすることでした。

navigationView.pop(10); 

これはうまくいきましたが、私は決して満足していませんでしたが、今ではリセット方法を導入しています。これは、あなたがそれを@Mithralasが言ったことと同様の仕事をしていることがわかりますが、ちょうど簡単に書くために(下記参照)煎茶のソースコード内で内部

...これ

navigationView.reset(); 
を呼び出すことができます。

// From the Sencha source code 
this.pop(this.getInnerItems().length); 
1

溶液は、以下でナビゲーションビューを拡張することが判明:

popToRoot: function(destroy) 
{ 
    var navBar = this.getNavigationBar(), 
    stackLn = this.stack.length, 
    stackRm; 

    //just return if we're at root 
    if(stackLn <= 1) return; 
    //just return if we're already animating 
    if(navBar && navBar.animating) return; 

    //splice the stack to get rid of items between top and root 
    stackRm = this.stack.splice(1, stackLn-2); 
    //remove views that were removed from the stack if required 
    if(destroy) { 
     stackRm.forEach(function(val, idx, arr) { 
      this.remove(val, true); 
     }); 
    } 
    //clear out back button stack 
    navBar.backButtonStack = []; 
    //now we can do a normal pop 
    this.pop(); 
} 
+0

アクティブなアイテムをrootに設定する方法があるが、ビュースタックを変更しないという答えを得たSenchaのフォーラムに質問を投稿しました。 この時点で、私はそれを行うための自分のルーチンを追加することに決めました。私はSenchaフォーラムにも私のソリューションを掲載しました。うまくいけば、Sencha Touch 2.0にこの機能を追加してください。 – mwu

+0

Sencha Touch 2ではthis.pop(this.getItems()。length);と言うことができます。 –

+0

真。彼らは自分の解決策を投稿した後にそれを追加し、同様の機能がデフォルトで組み込まれるように求めました。 – mwu

7
popToRoot: function() { 
    this.pop(this.getItems().length - 1); 
} 
+0

私の質問を書いた時点で、このコードは最新の開発者プレビューでは機能しませんでした。これが正しい方法であるので、私はこれに対する私の受け入れられた答えを変えています。 – mwu

+5

適切な方法は、2.0の場合です navigationView.reset() –

2

NavigationView.reset()メソッドを使用するようにしてください。これを明確にするために、メインのナビゲーションビューがメインの場合は、コントローラーで次のような操作を行います。

this.getMain()。reset();