javascript - sistema - como desactivar actualizaciones automaticas android
Cómo actualizar una página en una aplicación de red troncal (13)
A menudo puede modificar su ruta para incluir un splat, de modo que pueda agregar una cadena aleatoria al final de un href para que sea única, pero igual la ruta "inicial". (Nota: haga de esta su última ruta).
En las rutas :
routes: {
"*str": "home"
}
En la vista :
render: function() {
var data = {href: +(new Date())};
_.extend(data, this.model.attributes);
this.$el.html(this.template(data));
return this;
}
En la plantilla (manubrios que se muestran aquí):
<a href="{{href}}">Home Link</a>
Estoy usando backbone para construir mi aplicación web.
Actualmente estoy enfrentando un problema por el cual, si estoy en la página de inicio, no puedo actualizar la misma página simplemente haciendo clic en el botón "Inicio" nuevamente.
Creo que esta es la limitación proporcionada por la red troncal (no vuelve a cargar la página si se llama a la misma URL)
¿Hay alguna forma de evitar esto? Para que pueda activar una recarga de página cuando hago clic nuevamente en el botón de inicio, es decir, ¿vuelvo a llamar a la misma URL?
El backbone.history.loadUrl es la solución.
La función de manejo de clic de su botón de Inicio (si la casa es la raíz / de su Aplicación Web) debe ser:
myAppRouter.navigate('''');
Backbone.history.loadUrl();
En caso de que quiera volver a cargar toda la página con la vista deseada. Esto podría hacer que senes para el botón de inicio. La ventaja será que refrescará la memoria.
Vaya a cualquier ruta sin cargarla (sin el ''verdadero'') y luego vuelva a cargarla
Backbone.history.navigate(''route/goes/here'');
window.location.reload();
En cuanto a la fuente backbone.js, parece que esto no es posible de forma predeterminada, ya que solo responde a un cambio de URL. Y como hace clic en el mismo enlace, no activará un evento de cambio.
Código en Backbone.History:
$(window).bind(''hashchange'', this.checkUrl);
Necesitarás manejar un no cambio tú mismo. Esto es lo que hice:
$(''.nav-links'').click(function(e) {
var newFragment = Backbone.history.getFragment($(this).attr(''href''));
if (Backbone.history.fragment == newFragment) {
// need to null out Backbone.history.fragement because
// navigate method will ignore when it is the same as newFragment
Backbone.history.fragment = null;
Backbone.history.navigate(newFragment, true);
}
});
Está buscando Backbone.history.loadUrl
. Desde la fuente anotada :
Intenta cargar el fragmento de URL actual. Si una ruta tiene éxito con una coincidencia, devuelve
true
. Si ninguna ruta definida coincide con el fragmento, devuelvefalse
.
Por lo tanto, para un enlace de actualización simple, puede agregar el siguiente evento a su Backbone.View
:
events: {
''click a#refresh'': function() {
Backbone.history.loadUrl();
return false;
}
}
Este es mi enfoque favorito hasta ahora:
if (!Backbone.history.navigate(urlPath, true)) {
Backbone.history.loadUrl();
}
Esto no está hasta la columna vertebral. Lo mismo funciona bien en Chrome (navegadores webkit), pero no en Firefox. Es un comportamiento del navegador
Funciona con
myBackboneRouter.navigate("users", {trigger: true})
La diferencia entre http://localhost.com/ y http://localhost.com/#!/ es que el segundo es un enlace al ancla, no carga una página, solo busca el ancla en la página actual , y se desplaza hacia ella si se encuentra. Debe hacer que su enlace se vea como el primero, sin "#" cerca de su final.
Necesitaba ''actualizar'' mi página en el evento de cambio de orientación porque no todas mis consultas de medios css para el modo vertical se ejecutaron correctamente de manera predeterminada. Esto es lo que terminé haciendo:
Backbone.history.fragment = null;
Backbone.history.navigate(document.location.hash, true);
Por supuesto, para la integridad de esta respuesta, esto estaba envuelto en algún código de manejo de cambio de orientación:
window.addEventListener(''orientationchange'', function () {
Backbone.history.fragment = null;
Backbone.history.navigate(document.location.hash, true);
}, false);
Para proporcionar un fragmento reutilizable de código, aumenté el Backbone.View con un método de ayuda para volver a utilizarlo donde sea que necesitemos volver a cargar la misma página a pesar de las limitaciones del router Backbone.
En nuestro archivo app.js o en cualquier otro lugar adecuado
Backbone.View = Backbone.View.extend({
refreshPage: function(e){
if(e.target.pathname){
Backbone.history.navigate(e.target.pathname);
}
window.location.reload();
}
});
De esta manera si tenemos un enlace como
<a href="/whatever" id="whateverId">Some text </a>
En nuestra vista, solo tendríamos que vincular el evento de clic a esa devolución de llamada para aprovechar la función de página de actualización, en la medida en que la ayuda de refreshPage esté disponible a través de la cadena de prototipos.
events: {
''click #whateverId'': ''refreshPage'',
}
En la medida en que no necesitemos cambiar la "etiqueta a", se trata de una solución más limpia que ahorrará un código repetitivo
Espero eso ayude
Puede actualizar fácilmente la página utilizando el siguiente enfoque:
@win_loc = window.location.toString().replace("#","")
Backbone.history.redirectTo(@win_loc)
También puede hacer un cambio sin sentido en la url añadiendo un número al azar al final:
var url = $(this).attr(''href'') + ''?rand='' + Math.floor(Math.random() * 1000);
Backbone.history.navigate(url, true);
Esto es especialmente útil para IE ya que no solicitará nuevos datos a través de una llamada AJAX si la URL no ha cambiado.