2010-07-23 29 views
18

Examiné cómo ExtJs representa los campos del formulario en dom. Para cambiar fieldLabel después de que se represente el campo, encuentro el elemento dom correcto y cambio su innerHTML;Extjs change fieldLabel after field se representa. ¿Alguna mejor solución?

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

Respuesta

22

Acceso a la dom cambiar dinámicamente fieldLabels era pre 3.0.1

Después 3.0.1 Creo que esto funciona

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

sólo se puede hacer esto una vez que el campo ha sido prestado.

+0

Sí que funciona :). Muchas gracias, esta es la respuesta exacta que estaba buscando. – Zango

+4

Ahora es 'labelEl', not' label' ... –

5

no podían encontrar inmuebles etiqueta en un objeto de campo en Ext 4 vez esto funcionó para mí:

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

Si desea agregar una etiqueta HTML con la mejor solución para ExtJs 4 es con el método de actualización (el método de actualización está en la etiqueta El, no en la etiqueta):

field.labelEl.update ('Nueva etiqueta');

+0

Esto funcionó bien. Sin embargo, ¿cómo obtengo el valor de la etiqueta después de eso? Llamar a field.getFieldLabel() devuelve el valor OLD: - / – Geo

4

Con ExtJS 4.2 Esto funciona para mí:

field.setFieldLabel('New Label');

2

acabo de venir a través de la misma edición, pero en mi situación ya las etiquetas podría traducirse, o no. así que tuve que cubrir ambos casos:

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

he comprobado en ExtJS 3.2

0

En Extjs 3.4.0, la primera línea en la función no funcionará.

Reemplazar con esto:

//var el = field.el.dom.parentNode.parentNode; 
var el = Ext.getCmp(field).getEl().dom.parentNode.parentNode; 
Cuestiones relacionadas