Sencha Touch Ext.navigation.View pop to root

时间:2012-01-09 14:46:10

标签: navigation pop sencha-touch-2

我有一个Ext.navigation.View,其中我已经推了几个视图。某些用户交互需要我直接返回到导航视图的顶层 - 相当于iOS中UINavigationController上的popToRootViewControllerAnimated:。

我尝试了各种各样的事情:

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

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

都没有工作。第一个例子似乎让我陷入无限循环,这并不太令人惊讶。第二个例子似乎只是弹出一个视图。

所以问题是:在Sencha Touch(版本2开发人员预览版)的Ext.navigation.View中弹出根视图的正确方法是什么?

4 个答案:

答案 0 :(得分:9)

实现这一目标有许多临时方法。

我使用的是弹出的数字高于你曾经拥有的数字,例如

navigationView.pop(10);

并且工作正常,但我对此并不满意,但我发现他们现在已经引入了重置方法。你可以这么称呼......

navigationView.reset();

在Sencha源代码内部(见下文),您可以看到它与@Mithralas所说的相似,但更容易编写。

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

确保使用NavigationView.reset()方法。为清楚起见,如果您的主导航视图是Main,您可以在控制器中执行以下操作:

this.getMain()复位();

答案 3 :(得分: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();
}