javascript hyperlink dojo tabs tabcontainer

javascript - ¿Cómo cambiar el comportamiento de Dojo TabContainer para simplemente abrir un enlace externo en lugar de mostrar un Panel de contenido?



hyperlink tabs (2)

Los ContentPanes no son en realidad iframes, por lo que la configuración de window.location.href cambiaría la URL de toda su página (aplicación dojo) y no solo el ContentPane. Has intentado algo como ésto:

cp2.set(''href'', ''http://www.google.com/'')

Estoy trabajando con un TabContainer tiene varios niños ContentPane diferentes. Cada uno de ellos está equipado con un parámetro href para recuperar el contenido externo de AJAX que se muestra cuando se selecciona una pestaña:

dojo.addOnLoad(function() { var tc_nav = new dijit.layout.TabContainer({ style: ''width: 98%;'', doLayout: false }, ''tc_nav''); var cp1 = new dijit.layout.ContentPane({ title: ''Test 1'', href: ''ajax?test1'', style: ''padding: 10px;'', selected: true }); dojo.connect(cp1, ''onShow'', function() { cp1.refresh(); }); /* * ... */ tc_nav.addChild(cp1); /* * ... */ tc_nav.startup(); });

Ahora quiero integrar una pestaña entre las otras, que debería ser diferente en su comportamiento: en lugar de cargar contenido en un ContentPane Contenido, la pestaña debe seguir un enlace simple en la misma ventana (como un <a href="http://www.google.com/">Link</a> ), dejando la página que contiene la aplicación js / dojo. No encontré ninguna solución satisfactoria aún, ni un widget dojo que coincida con este requisito. ¿Cuál sería el mejor enfoque?

Como una solución desagradable, creé un evento onShow anulado que onShow una onShow window.location.href = ''...''; :

var cp2 = new dijit.layout.ContentPane({ title: ''Test 2'', style: ''padding: 10px;'' }); dojo.connect(cp2, ''onShow'', function() { window.location.href = ''http://www.google.com/''; });

Una desventaja molesta de esta solución es el hecho de que ContentPane se carga primero y luego se establece window.location.href , lo que genera un efecto de recarga diferido bastante peculiar y, en consecuencia, una mala experiencia del usuario. Me gustaría evitar este paso intermedio.


Una solución posible para cumplir con los requisitos mencionados anteriormente es anular el evento onClick del controlButton del controlButton :

/* * ... */ var cp2 = new dijit.layout.ContentPane({ title: ''Test 2'', style: ''padding: 10px;'' }); /* * ... */ tc_nav.addChild(cp2); /* * ... */ tc_nav.startup(); /* * ... */ cp2.controlButton.onClick = function() { window.location.href = ''http://www.google.com/''; };

Tenga en cuenta que no debe adjuntar otra función al evento onClick (p. Ej., Por dojo.connect(cp2.controlButton, ''onClick'', function() { /* ... */ }); ), sino que debe anularlo, de lo contrario, la El contenido de ContentPane se llamará primero.

Tenga en cuenta además que la TabContainer startup() TabContainer debe invocarse primero para hacer que el objeto controlButton accesible.