modern - ExtJS: alineación incorrecta del menú desplegable
sencha examples 6 (3)
Tengo un botón dividir con un menú y un menú personalizado Configuración de alineación (para que la esquina superior derecha del menú desplegable se alinee con la esquina inferior derecha del botón dividir).
Problema: la primera vez que hace clic en el botón split, el menú no está alineado correctamente. Sin embargo, los clics posteriores funcionan bien. Ver el mismo comportamiento en Chrome y FF, ExtJS 4.0.2a.
¿Algunas ideas? ¡Gracias!
{
xtype: ''toolbar'',
items: [
{
xtype: ''triggerfield'',
width: 335,
emptyText: ''Search'',
triggerCls: ''x-form-search-trigger''
},
''->'',
{
xtype: ''splitbutton'',
text: ''Account'',
menuAlign: ''tr-br'',
menu: {
xtype: ''menu'',
plain: true,
items: [
{
xtype: ''container'',
html: ''image here...''
},
{
xtype: ''button'',
width: 10,
text: ''Log Out''
}
]
}
}
]
}
Ok, entonces se me ocurrió una solución "no es bonita pero hace el trabajo": esconder rápidamente, y luego mostrar, el menú después de que se represente. En otras palabras, cuando alguien hace clic la primera vez y se muestra el menú, ocultelo automáticamente y muéstrelo de nuevo. Cuando se vuelve a mostrar, la alineación es correcta. Aquí está el nuevo código:
{
xtype: ''toolbar'',
items: [
{
xtype: ''triggerfield'',
width: 335,
emptyText: ''Search'',
triggerCls: ''x-form-search-trigger''
},
''->'',
{
xtype: ''splitbutton'',
text: ''Account'',
menuAlign: ''tr-br'',
menu: {
xtype: ''menu'',
plain: true,
items: [
{
xtype: ''container'',
html: ''Image here...''
},
{
xtype: ''button'',
text: ''Log Out''
}
],
listeners: {
afterrender: function(component) {
// Hide menu and then re-show so that alignment is correct.
component.hide();
component.show();
}
}
}
}
]
}
Cambié
component.hide();
component.show();
a
component.doLayout();
qué IMO es más limpio y funciona igual (al menos en mi caso).
La variante de ocultar / mostrar es mucho más rápida. * .doLayout () es un gran cañón para resolver un problema tan simple.
Recomiendo encarecidamente ver este video tutorial: http://www.sencha.com/learn/layouts-and-containers/
Tiene ~ 45 minutos de duración, pero aclara más de pocas cosas para aquellos que no conocen bien los diseños.
editar: Ahora que lo pienso, no estoy seguro de si wheteher .show () / .hide () no enciende doLayout () en algún lugar de su código. Tendría que ser verificado :)