2012-02-20 16 views
7

Esto es probablemente una pregunta muy fácil, en una vista, ato un evento de 'clic' a un botón, cuando se hace clic en ese evento deseo redirigir a una página totalmente nueva (por ejemplo, no una ruta)backbone ir a otra página

p. Ej.

events : {  
    "click .button" : 'redirect' 
}, 
redirect : { 
    window.location('otherlink'); 
} 

Podría usar window.location, pero parece que es la manera incorrecta? ¿Alguna idea apreciada?

Respuesta

2

Simplemente usaría un simple <a href="otherlink">Link Title</a>. Si el enlace es dinámico, me basaría en una vista para representar el enlace y administrar su estado y href.

Si tiene que hacer algo antes de dejar que el usuario ve la página de la utilización secundaria y controlador de eventos sin la event.preventDefault() o evitar que vuelvan false.

13

Backbone tiene un 'enrutador' (que es básicamente lo que he llegado a conocer como controlador). Puedes usarlo para hacer navegación. Por ejemplo:

var MyApp = new Backbone.Router(); 
MyApp.navigate('newPage', {trigger: true}); 

trigger se asegura de que se produzca un evento en caso de que esté utilizando dichos eventos.

Puede agrupar el enrutador con el 'historial' de Backbone y crear una aplicación de una página bastante impresionante muy fácilmente.

Editar: No importa, acabo de volver a leer que no quería utilizar una ruta. Mis dos centavos: haz una envoltura para hacer la navegación por ti. Tuve que refactorizar una aplicación de JavaScript bastante grande hace unas semanas, sacando un centenar de ubicaciones de ventana para poder probarlas en una unidad. No es tan divertido. Es decir:

MyApp = { 
    navigate: function (url) { window.location = url; } 
} 

Ahora usted puede hacer las pruebas unitarias, como se puede anular MyApp.navigate con algo que no hace nada cuando se le llama. También puede agregar lógica de negocios si es necesario ... o filtros ... o cualquier otra cosa ... sin necesidad de molestar al resto de la aplicación. Por ejemplo, si la url está fuera del sitio, ábralo en una nueva ventana en lugar de simplemente mostrar en la misma página.

Cuestiones relacionadas