javascript - una - porque se caen las pestañas dermatologo
¿Dojo TabContainer tiene un evento que se activa cuando se cambian las pestañas? (4)
Además de la respuesta de @ phusick, que es correcta, todos los StackContainer
, incluido el TabContainer
publican sobre temas a los que puede suscribirse.
http://dojotoolkit.org/reference-guide/1.7/dijit/layout/StackContainer.html#published-topics
[widgetId]-addChild,
[widgetId]-removeChild
[widgetId]-selectChild
http://dojotoolkit.org/reference-guide/1.7/dojo/subscribe.html#dojo-subscribe
¿DOJO TabContainer tiene un evento que se activa cuando se cambian las pestañas?
Me imagino que lo haría, pero no pude encontrar nada al respecto en la documentación. :(
RESUELTO: Parece que encontré una solución aquí:
Dijit TabContainer Events - onFocus
no es el título del tema más buscable: /
Aquí hay un ejemplo de código completo que funciona en Dojo 1.8, lo he probado. No es un evento que se dispara solo al cambiar las pestañas, no pude obtener ninguno de sus eventos en la API para disparar, pero al menos funciona en el evento Click.
require(["dijit/registry", "dojo/on", "dojo/ready", "dojo/domReady!"], function (registry, on, ready) {
ready(function () { //wait till dom is parsed into dijits
var panel = registry.byId(''mainTab''); //get dijit from its source dom element
on(panel, "Click", function (event) { //for some reason onClick event doesn''t work
$(''.hidden_field_id'').val(panel.selectedChildWidget.id); //on click, save the selected child to a hidden field somewhere. this $ is jquery, just change it to ''dojo.query()''
});
});
});
//include this function if you want to reselect the tab on page load after a postback
require(["dijit/registry", "dojo/ready", "dojo/domReady!"], function (registry, ready) {
ready(function () {
var tabId = $(''.hidden_field_id'').val();
if (tabId == null || tabId == "")
return;
var panel = registry.byId(''mainTab'');
var tab = registry.byId(tabId);
panel.selectChild(tab);
});
});
De los documentos;
var tabs = registry.byId(''someTabs'');
tabs.watch("selectedChildWidget", function(name, oval, nval){
console.log("selected child changed from ", oval, " to ", nval);
});
Conecte aspect.after
al método selectChild de selectChild
:
var tabContainer1 = registry.byId("tabContainer1");
aspect.after(tabContainer1, "selectChild", function() {
console.log("tab changed");
});
O si está interesado en una pestaña en particular, conéctese a _onShow
su ContentPane:
var contentPane1 = registry.byId("contentPane1");
aspect.after(contentPane1, "_onShow", function() {
console.log("[first] tab selected");
});
Véalo en acción en jsFiddle: http://jsfiddle.net/phusick/Mdh4w/