Por lo tanto, debo eliminar un enrutador en backbone.js
para evitar que se produzcan rutas. He intentado myRouter.off()
y myRouter.remove()
sin ningún tipo de suerte.Desvincular un enrutador en backbone.js
¿Qué puedo hacer en su lugar?
Por lo tanto, debo eliminar un enrutador en backbone.js
para evitar que se produzcan rutas. He intentado myRouter.off()
y myRouter.remove()
sin ningún tipo de suerte.Desvincular un enrutador en backbone.js
¿Qué puedo hacer en su lugar?
No existe una forma oficialmente compatible para hacer esto (que yo sepa). Si desea desactivar cualquier enrutador, puede utilizar Backbone.history.stop();
, que es indocumentado, pero que se ve en el código fuente con este comentario:
// Disable Backbone.history, perhaps temporarily. Not useful in a real app,
// but possibly useful for unit testing Routers.
De lo contrario, tendría que codificar alguna condición de paso a través de su los manejadores de ruta del enrutador si el estado del enrutador está "deshabilitado" o algo así. O itere en Backbone.history.handlers indocumentado (la matriz interna que contiene .route - como regexp - y .callback) y elimine las rutas relacionadas con este enrutador específico.
Obviamente, al ser indocumentados y todo, esto está sujeto a cambios en versiones futuras de Backbone.
si usted es capaz de controlar la creación de instancias de su router, puede hacer lo siguiente:
var myRouter = new MyRouter({ routes: function(){
return;
}});
Puede utilizar la solución basada hack-(que utiliza métodos no-API y puede dejar de funcionar con las nuevas versiones de Backbone.js)
var router = new(Backbone.Router.extend({
routes: {
"authentication": "authentication",
"contacts": "contacts",
"*notFound": "notFound"
},
/**
* @param {string} routeName
*/
disableRoute: function(routeName) {
var index, handler, handlers = Backbone.history.handlers;
delete this.routes[routeName];
for (var i = 0, len = handlers.length; i < len; i++) {
handler = handlers[i];
if (handler.route.toString() === router._routeToRegExp(routeName).toString()) {
handlers.splice(index, 1);
break;
}
}
},
contacts: function() {
alert('route `contacts`');
},
authentication: function() {
alert('route `authentication`');
},
notFound: function() {
alert('route `notFound`');
router.navigate('404');
}
}));
Backbone.history.start({
silent: true
});
$(function() {
$('#remove').on('click', function() {
router.disableRoute('authentication');
router.navigate('404');
});
$('#goto_auth').on('click', function() {
router.navigate('authentication', {
trigger: true
});
});
$('#goto_contacts').on('click', function() {
router.navigate('contacts', {
trigger: true
});
});
});
button {
display: block;
margin: 10px;
}
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
</head>
<body>
<button id="goto_auth">goto authentication route</button>
<button id="goto_contacts">goto contacts route</button>
<hr>
<button id="remove">remove authentication route</button>
</body>
</html>
divertido, yo creo que su desactivación después de salir de la aplicación es útil, hay otras maneras de manejar i t, pero me gustaría mucho backbone.history.stop – pushplaybang