Extjs изменяет fieldLabel после отображения поля. Есть лучшее решение? - PullRequest
19 голосов
/ 24 июля 2010

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

/**
* 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);

Ответы [ 6 ]

22 голосов
/ 24 июля 2010

Доступ к dom для динамического изменения fieldLabels был до 3.0.1

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

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

Это можно сделать только после визуализации поля.

12 голосов
/ 10 апреля 2012

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

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

5 голосов
/ 16 ноября 2011

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

field.labelEl.dom.innerText = 'New Label';
4 голосов
/ 10 июня 2013

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

field.setFieldLabel('New Label');

3 голосов
/ 12 сентября 2013

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

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

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

0 голосов
/ 06 декабря 2013

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

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

//var el = field.el.dom.parentNode.parentNode;
var el = Ext.getCmp(field).getEl().dom.parentNode.parentNode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...