Sencha Touch Ext.navigation.View поп-корень - PullRequest
1 голос
/ 09 января 2012

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

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

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

и

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

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

Итак, вопрос: как правильно перейти к корневому представлению в Ext.navigation.View в Sencha Touch (превью для разработчиков версии 2)?

Ответы [ 4 ]

9 голосов
/ 16 мая 2012

Был ряд временных методов для достижения этой цели.

Я использовал один, чтобы выскочить число выше, чем количество уровней, которые вы когда-либо имели бы, например

navigationView.pop(10);

и это работало нормально, но я никогда не был доволен этим, но я вижу, что теперь они ввели метод сброса.То, что вы можете назвать таким образом ...

navigationView.reset();

Внутри исходного кода Sencha (см. Ниже) вы можете видеть, что он выполняет ту же работу, что и @Mithralas, но просто писать.

// From the Sencha source code
this.pop(this.getInnerItems().length);
7 голосов
/ 19 апреля 2012
popToRoot: function() {
     this.pop(this.getItems().length - 1);
}
2 голосов
/ 07 июня 2013

Убедитесь, что вы используете метод NavigationView.reset (). Чтобы было понятно, если ваш основной вид навигации - Main, вы должны сделать что-то подобное в контроллере:

this.getMain () сброса ();.

1 голос
/ 11 января 2012

Оказалось, что решение расширяет представление навигации следующим образом:

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();
}
...