2012-01-09 76 views
1

我有一個Ext.navigation.View,其中推送了一些視圖。某些用戶交互要求我直接回到導航視圖的頂層 - 相當於iOS上的UINavigationController上的popToRootViewControllerAnimated:。Sencha Touch Ext.navigation.View彈出至根目錄

我已經試過像各種各樣的事情:

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

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

既不工作。第一個例子似乎讓我陷入了一個無限循環,這並不令人感到意外。第二個例子似乎只彈出一個視圖。

所以問題:在Sencha Touch的Ext.navigation.View(版本2開發人員預覽版)中彈出到根視圖的正確方法是什麼?

回答

9

已經有許多用於實現該臨時方法。

我正在使用的是彈出一個數字比你曾經擁有過的水平的數量更高,

navigationView.pop(10); 

,並且工作得很好,但我從來沒有滿意了,但我看到他們現在已經推出了復位方法。您可以在煎茶源代碼中內部調用從而...

navigationView.reset(); 

(見下文),你可以看到它做了類似的工作,以什麼@Mithralas說,只是更容易編寫。

// 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

我在Sencha的論壇發佈了這個問題,它讓我回答有一種方法可以將活動項目設置爲root,但不會修改視圖堆棧。 正是在這一點上,我決定添加自己的例程來做到這一點。我在Sencha論壇上發佈了我的解決方案,並希望他們將這個功能添加到Sencha Touch 2.0 – mwu 2012-01-11 16:19:37

+0

從Sencha Touch 2開始,你可以說this.pop(this.getItems()。length); – 2012-03-28 10:41:25

+0

是的。他們補充說,在我將解決方案發布給他們之後,並要求默認包含類似的功能。 – mwu 2012-05-10 17:19:35

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

在我寫這個問題的時候,這段代碼在最新的開發人員預覽版中無法使用。由於這是現在正確的做法,我正在改變我接受的答案。 – mwu 2012-05-10 17:23:17

+5

正確的做法是從2.0開始 navigationView.reset() – 2012-06-26 15:54:52

2

確保使用NavigationView.reset()方法。爲了清楚起見,如果你的主導航視圖是Main,你可以在控制器中這樣做:

this.getMain()。reset();