В ExtJs я хотел бы достигнуть эквивалента:
<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, но это не покажет (поскольку я принимаю, потому что не Радио) и я не могу добавить объекты к Радио-объекту.
Любой ценивший совет, спасибо.
Добавьте элемент
в 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. Также не тестировалось, но вместо создания
вы можете создать элемент контейнера и создать TextField и renderTo
этот элемент.
Я не думаю, что это возможно, если вы не переопределите класс RadioButton и не измените его логику рендеринга (и я думаю, что это будет сложнее, чем вы думаете, правильно отрисовать текстовое поле так, как вы предложили). Лучшим подходом было бы просто добавить радио и текстовое поле как два отдельных поля и связать их программно. В Ext 3.2 для этого можно было легко использовать CompositeField. В обработчике радио fn вы можете установить фокус на связанное с ним текстовое поле или любую другую логику, которая вам понадобится.