2010-07-09 8 views
6

En ExtJs quisiera alcanzar el equivalente de:botón Ext Js Radio con el texto de entrada en su etiqueta

<input type="radio"><label><input type="text"></label> 

Cuando el cuadro de entrada está asociado al botón de radio.

new Ext.form.RadioGroup({ 
         id:"alerts", 

         items: [ 
          new Ext.form.Radio({ 
           boxLabel:'Now', 

          }), 
          new Ext.form.Radio({ 
           boxLabel:'On', 
          }) 

         ] 
); 

Me gustaría que la etiqueta "On" tenga un Ext.form.TextField al lado.

He intentado agregar un Ext.form.TextField al RadioGroup pero no se mostrará (como supongo que es porque no es una Radio) y no puedo agregar elementos al objeto de Radio.

Cualquier consejo apreció, gracias.

Respuesta

0

No creo que sea posible a menos que anule la clase RadioButton y cambie su lógica de representación (y creo que eso sería más complejo de lo que podría pensar para hacer un campo de texto correctamente como lo propuso). Un mejor enfoque sería simplemente agregar la radio y el campo de texto como dos campos separados y vincularlos mediante programación. En Ext 3.2 puede usar un CompositeField para hacer esto fácilmente. En el controlador de la radio, puede configurar el foco en su cuadro de texto asociado o en cualquier otra lógica que necesite.

2

añadir un elemento <input/> en el boxLabel, a continuación, en el caso RadioGroup render crear un TextField y aplicarlo a ese elemento

new Ext.form.RadioGroup({ 
    id:"alerts", 
    items: [ 
    {boxLabel: 'Now',}, 
    {boxLabel: 'On <input id="on_date" type="text"/>'}, // contains <input/> id is "on_date" 
    ], 
    listeners: { 
    change: function() { 
     // really, check if "on" was clicked 
     if(true) { 
     Ext.getCmp('on_date_field').focus(); 
     } else { 
     // otherwise, disable the field? 
     } 
    }, 
    render: function() { 
     new Ext.form.TextField({ 
     id: 'on_date_field', 
     applyTo: 'on_date', // apply textfield to element whose id is "on_date" 
     }); 
    } 
    } 
}); 

He confirmado que esto funciona con TextField, y aunque no tengo lo intenté, debería funcionar también con DateField o ComboBox. También no se ha probado, pero en lugar de crear un <input/>, puede crear un elemento contenedor y crear el elemento TextField y renderTo.

+0

¿En qué exploradores probaron esto? En Firefox, el elemento de radio roba el foco del campo de texto y no permite escribirlo (hasta que salga de la radio). En IE, obtienes "fieldLabel es nulo o no es un objeto". No estoy seguro si usted fue el que votó mi respuesta, pero no dije que no sería posible hacerlo. Dije que sería más complejo de lo que podría pensar. Creo que esta respuesta prueba mi punto. –

+0

Lo probé en Firefox 3.6. El robo de foco se debe a que se hace clic en la etiqueta y hay un controlador en RadioGroup que intenta interceptar clics de etiqueta. Edité la respuesta para que funcione correctamente. Yo te voté, siento que soy nuevo en SO, no entiendo si eso tiene un gran impacto o no, pensé que solo estaba indicando desacuerdo con tu respuesta. Intenté recuperarlo, pero no me lo permitió. –

+0

No existe una "regla", pero como la votación negativa en realidad elimina la reputación de la persona a la que votó negativamente, el propósito normalmente es indicar que una respuesta no está relacionada con el tema o es engañosa. Normalmente, cuando alguien intenta legítimamente ofrecer ayuda, incluso si no es la respuesta que usted cree que es mejor, esa no es realmente una razón para rechazar (en lugar de eso, puede comentar por qué cree que la respuesta no es la mejor, iniciando así una conversación útil, como éste). Tal vez alguna otra persona agradable vendrá y me votará para llamarlo incluso ... :) –