2010-07-23 7 views
18

Я исследовал, как ExtJs отображает поля формы в dom. Чтобы изменить поле fieldLabel после визуализации поля, я нахожу правильный элемент dom и изменяю его innerHTML;Extjs change fieldLabel после визуализации поля. Любое лучшее решение?

/** 
* Modifies field's label afrer field is rendered. 
* 
* @param {object} field 
* Some object that directly or indirecty extends Ext.form.Field 
* @param {String} label 
* New value for field's label. 
*/ 
function setLabel(field,label){ 
    var el = field.el.dom.parentNode.parentNode; 
    if(el.children[0].tagName.toLowerCase() === 'label') { 
     el.children[0].innerHTML =label; 
    }else if(el.parentNode.children[0].tagName.toLowerCase() === 'label'){ 
    el.parentNode.children[0].innerHTML =label; 
    } 
    return setLabel; //just for fun 
} 

//EXAMPLE: 
var win = new Ext.Window({ 
    height : 200, 
    width : 300, 
    layout : 'form', 
    labelAlign : 'right', 
    items : [{ 
     xtype : 'textfield', 
     fieldLabel : 'name', 
     ref : 'f', 
     html : 'asdf' 
    },{ 
     xtype : 'datefield', 
     fieldLabel : 'date', 
     ref : 'd' 
    },{ 
     xtype : 'combo', 
     fieldLabel : 'sex', 
     ref : 'c', 
     store : [[1,"male"],[2,"female"]] 
    },{ 
     xtype : 'radio', 
     fieldLabel : 'radio', 
     ref : 'r' 
    },{ 
     xtype : 'checkbox', 
     fieldLabel : "checkbox", 
     ref : 'ch' 
    }] 
}).show() 

setTimeout(function(){ 
    setLabel(win.f,'Last Name')(win.d,'Birth Date')(win.c,'Your Sex')(win.r,'jus radio')(win.ch,'just checkbox'); 
},3000); 

ответ

22

Доступ к DOM динамически изменять fieldLabels предварительно 3.0.1

После 3.0.1 Я считаю, что это работает

field.labelEl.update('New label'); 

Вы можете сделать это только после того, как поле было вынесено.

+0

Да это работает :). Большое вам спасибо, это точный ответ, который я искал. – Zango

+4

Теперь это 'labelEl', а не' label' ... –

5

не может найти метку собственности в объекте поля в Ext 4 вместо этого работало для меня:

field.labelEl.dom.innerText = 'New Label'; 
12

Если вы хотите добавить ярлык с HTML лучшим решением для ExtJS 4 является метод обновления (метод обновления находится в labelEl, а не в метке):

field.labelEl.update ('New label');

+0

Это сработало отлично. Однако, как мне получить значение метки после этого? Вызов field.getFieldLabel() возвращает значение OLD: - / – Geo

4

С ExtJS 4.2 это работает для меня:

field.setFieldLabel('New Label');

2

Я только что по тому же вопросу, но в моей ситуации лейблы уже может быть вынесено, или нет. так что я должен был покрыть оба случая:

var newLabel = 'new label'; 
if (!field.rendered) field.fieldLabel = newLabel; 
else field.label.update(newLabel); 

Я тестировал его в ExtJS 3.2

0

В ExtJS 3.4.0, первая строка в функции не работает.

Заменить это:

//var el = field.el.dom.parentNode.parentNode; 
var el = Ext.getCmp(field).getEl().dom.parentNode.parentNode; 
Смежные вопросы