Enrutador de hierro de meteoro: enrute varias rutas a una plantilla pero siga SECO
routing dry (2)
Quiero enrutar varias rutas a la misma plantilla. Por ejemplo, /abc/home
y /home
mostrarán la plantilla de home
. Las rutas también pueden tener subcampos, por lo que abc/parent/child
y /parent/child
deben enrutar a la misma ruta.
Puedo simplemente repetir :
Router.route(''/home'', function () { this.render(''home''); Session.set(''menu'', ''home''); }); Router.route(''/abc/home'', function () { this.render(''home''); Session.set(''menu'', ''home''); });
Pero no quiero repetirlo Si deseo cambiar la plantilla a la que dirigirme, solo quiero cambiarla una vez, para mayor comodidad y también para minimizar los errores.
También puedo usar parámetros :
Router.route(''/:_abc/:path'', function () { if(this.params._abc == ''abc'') { switch(this.params.path) { case ''home'': this.render(''home''); break; case ''someotherroute'': this.render(''someotherroute''); break; } } });
Pero esto, nuevamente, me repito. Además, puede haber subcampos, y no quiero definir el enrutamiento para /:_abc/:parent/:children
y /:_abc/:grandparent/:parent/:children/:
porque estará desordenado.
También intenté usar
Router.go()
:Router.route(''/:_abc/:route'', function () { if(this.params._abc == ''abc'') { Router.go(''/'' + this.params.route); } });
Pero esto elimina el /abc/
de la url, que es indeseable en mi caso.
La mejor solución que tengo ahora es usar una función compartida :
var renderHome = function () { this.render(''home''); Session.set(''menu'', ''home''); } Router.route(''/home'', renderHome()); Router.route(''/abc/home'', renderHome());
¿Puedo hacer algo como especificar una matriz o una cadena separada por comas ?
Router.route([''/home'', ''/abc/home''], function () {
this.render(''home'');
Session.set(''menu'', ''home'');
});
// or
Router.route(''/home, /abc/home'', function () {
this.render(''home'');
Session.set(''menu'', ''home'');
});
¿Cómo puedo enrutar de manera eficiente múltiples rutas a una plantilla, sin repetirme?
Use una expresión regular (regex) que coincida con /home
y /abc/home
.
Hice una segunda plantilla que solo incluye la primera. En tu caso, esto podría verse así:
<template name="abcHome">
{{> home}}
</template>