2010-07-09 2 views
6

В ExtJS я хотел бы достичь эквивалент:Кнопка Ext Js радио с ввода текста на этикетке

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

Если поле ввода связано с радио-кнопки.

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

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

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

         ] 
); 

Я бы хотел, чтобы на этикетке «Вкл.» Был включен Ext.form.TextField.

Я попытался добавить Ext.form.TextField в RadioGroup, но он не будет отображаться (как я предполагаю, потому что это не радио), и я не могу добавить элементы в объект Radio.

Любые советы, благодарственные.

ответ

0

Я не думаю, что это возможно, если вы не переопределите класс RadioButton и не измените его логику визуализации (и я думаю, что это было бы более сложным, чем вы думаете, чтобы сделать текстовое поле корректно отображаемым способом, как вы предложили). Лучшим подходом было бы просто добавить радио и текстовое поле в виде двух отдельных полей и связать их программно. В Ext 3.2 вы можете использовать CompositeField, чтобы сделать это легко. В обработчике радио fn вы можете установить фокус на связанное с ним текстовое поле или любую другую логику, в которой вы нуждаетесь.

2

Добавить <input/> элемент в boxLabel, то на RadioGroup визуализации событий создать TextField и применить его к этому элементу

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" 
     }); 
    } 
    } 
}); 

Я подтвердил, что это работает с TextField, и хотя я не попробовал, он должен работать с DateField или ComboBox. Также непроверенный, но вместо создания <input/> вы можете создать элемент контейнера и создать этот элемент TextField и renderTo.

+0

В каких браузерах вы проверили это? В Firefox радиоэлемент убирает фокус с текстового поля и не позволяет вводить его (пока вы не отключите радио). В IE вы получаете «fieldLabel - это null или не объект». Не уверен, что вы тот, кто проголосовал за мой ответ, но я не сказал, что это невозможно сделать, я сказал, что это будет сложнее, чем вы думаете. Я думаю, что этот ответ подтверждает мою точку зрения. –

+0

Я попробовал это в Firefox 3.6. Кража фокуса заключается в том, что нажимается метка, и на RadioGroup есть обработчик, который пытается перехватить метки кликов. Я отредактировал ответ, чтобы он работал правильно. Я проголосовал за вас, извините, я новичок в этом, я не понимаю, имеет ли это большое влияние или нет, я думал, что просто указываю на несогласие с вашим ответом. Я попытался вернуть его, но это не позволило мне. –

+0

Нет никакого «правила», но поскольку нисходящее голосование фактически удаляет репутацию у человека, которого вы используете, цель обычно указывает, что ответ не соответствует теме или активно вводит в заблуждение. Обычно, когда кто-то законно пытается предложить помощь, даже если это не ответ, который вы считаете лучшим, на самом деле это не повод для downvote (вместо этого, может быть, комментировать, почему вы считаете, что ответ не самый лучший, таким образом, начинающий полезный разговор, например вот этот). Может быть, какой-нибудь другой приятный человек придет и подгонит меня, чтобы назвать его даже ... :) –