我有一个Ext.navigation.View,其中我已经推了几个视图。某些用户交互需要我直接返回到导航视图的顶层 - 相当于iOS中UINavigationController上的popToRootViewControllerAnimated:。
我尝试了各种各样的事情:
while(navigationView.getItems().getCount() > 1)
navigationView.pop();
和
while(navigationView.canPop())
navigationView.pop();
都没有工作。第一个例子似乎让我陷入无限循环,这并不太令人惊讶。第二个例子似乎只是弹出一个视图。
所以问题是:在Sencha Touch(版本2开发人员预览版)的Ext.navigation.View中弹出根视图的正确方法是什么?
答案 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();
}