2012-01-09 3 views
1

У меня есть Ext.navigation.View, в котором я нажал несколько просмотров. Для некоторых взаимодействий пользователей требуется, чтобы я возвращался прямо на верхний уровень навигационного представления - эквивалент popToRootViewControllerAnimated: на UINavigationController в iOS.Sencha Touch Ext.navigation.View pop to root

Я пробовал различные вещи, как:

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

и

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

Ни работы. Первый пример, кажется, помещает меня в бесконечный цикл, который не слишком удивляет. Второй пример, похоже, выдает один вид.

Итак, вопрос: Каков правильный способ проникновения в корневой режим в Ext.navigation.View в Sencha Touch (предварительный просмотр разработчика версии 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

+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(). Чтобы было ясно, если ваш основной навигационный режим - Main, вы бы сделали что-то подобное в контроллере:

this.getMain(). Reset();

Смежные вопросы