navigation pop sencha-touch-2

Sencha Touch Ext.navigation.View pop para rootear



sencha-touch-2 (4)

Ha habido una serie de métodos provisionales para lograr esto.

El que yo estaba usando era mostrar un número más alto que el número de niveles que alguna vez tendrían, por ejemplo

navigationView.pop(10);

y eso funcionó bien, pero nunca estuve contento con eso, pero veo que ahora han introducido un método de reinicio. Que puedes llamar así ...

navigationView.reset();

Internamente dentro del código fuente de Sencha (ver a continuación) puede ver que hace un trabajo similar al que dijo @ Mitralas, pero es más fácil de escribir.

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

Tengo un Ext.navigation.View en el que he enviado algunas vistas. Ciertas interacciones del usuario requieren que regrese directamente al nivel superior de la vista de navegación, el equivalente de popToRootViewControllerAnimated: en un UINavigationController en iOS.

He intentado varias cosas como:

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

y

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

Ni trabajo El primer ejemplo parece ponerme en un ciclo infinito que no es demasiado sorprendente. El segundo ejemplo solo parece mostrar una vista.

Entonces, la pregunta: ¿Cuál es la forma correcta de acceder a la vista raíz en Ext.navigation.View en Sencha Touch (versión 2 de la vista previa del desarrollador)?


La solución resultó extender la vista de navegación con lo siguiente:

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


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


Asegúrese de utilizar el método NavigationView.reset (). Para dejar en claro, si su vista de navegación principal es Main, haría algo como esto en el controlador:

this.getMain (). reset ();