2012-07-13 13 views
8

estoy usando history.js y tengo un controlador de eventos se desencadenan¿Cómo cambiar el estado sin activar el cambio de estado en history.js?

$(window).bind('statechange', function(){ 
    // Loads the content representing the state via ajax 
}); 

La mayoría de los cambios en el contenido de History.pushState([...]) cuando el usuario hace clic en un vínculo o un botón.

Pero en algunos casos el cambio de contenido es administrado por javascript directamente (es decir, cambiando, añadiendo o eliminando un elemento DOM) y no hay necesidad de cargar el contenido que representa el nuevo estado a través de ajax.

Aún así, tengo que empujar un estado y cambiar la url para reflejar el nuevo estado, si el usuario recarga golpe o temprano quieren usar el botón de retroceso etc.

Así que mi pregunta es: ¿cómo empujo un estado, pero evitar cargar el contenido en algunos casos? ¿Hay algún tipo de indicador que se pueda pasar al controlador de eventos statechange o puedo eludirlo por completo?

Respuesta

7

Me pregunté acerca de esta pregunta también. Mi decisión fue usar una variable global. Por ejemplo, puede inicializar window.stateChangeIsLocal como falso:

window.stateChangeIsLocal = false; 

Su manejador statechange podría estar buscando algo como esto:

History.Adapter.bind(window,'statechange',function(){ 
    if (!window.stateChangeIsLocal) { 
     someAjaxLoadFunction(History.getState().url); 
    } 
    else { 
     window.stateChangeIsLocal = false; 
    } 
}); 

Cuando cambia el estado y no quiere cargar un contenido de un nuevo estado, simplemente configure window.stateChangeIsLocal como true;

Quizás haya algunas soluciones más elegantes, pero no pude encontrarlas y usar esto.

+0

Mi propia solución fue algo similar, excepto que establecí una propiedad del objeto Historial global. Consulte también esta pregunta (http://stackoverflow.com/questions/8744487/statechange-is-firing-whenever-i-do-a-push-state?rq=1) para obtener más información sobre el tema. – jgivoni

Cuestiones relacionadas