1

いくつかのビューをプッシュしたExt.navigation.Viewがあります。特定のユーザーインタラクションでは、ナビゲーションビューのトップレベルに直接戻る必要があります。これは、iOSのUINavigationControllerのpopToRootViewControllerAnimated:に相当します。

私は次のようなさまざまなことを試しました:

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

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

どちらも機能しません。最初の例は、私を無限ループに陥らせているようですが、それほど驚くことではありません。2番目の例は、1つのビューを表示するだけのようです。

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

4

4 に答える 4

9

これを達成するためのいくつかの暫定的な方法がありました。

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

navigationView.pop(10);

それはうまくいきました、しかし私はそれに満足しませんでした、しかし私は彼らが今リセット方法を導入したのを見ます。このように呼び出すことができます...

navigationView.reset();

内部的にはSenchaソースコード(以下を参照)内で、@ Mithralasが言ったことと同様の仕事をしていることがわかりますが、書くのは簡単です。

// From the Sencha source code
this.pop(this.getInnerItems().length);
于 2012-05-16T15:49:47.077 に答える
7
popToRoot: function() {
     this.pop(this.getItems().length - 1);
}
于 2012-04-19T07:44:31.923 に答える
2

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

this.getMain()。reset();

于 2013-06-07T19:50:11.737 に答える
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();
}
于 2012-01-11T16:18:35.237 に答える