2010-07-23 16 views
18

Ich untersuchte, wie ExtJs Formularfelder in Dom rendert. Um fieldLabel zu ändern, nachdem das Feld gerendert wurde, finde ich das richtige dom-Element und ändere sein innerHTML;Extjs ändern fieldLabel nach Feld gerendert wird. Jede bessere Lösung?

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

Antwort

22

die dom Zugriff vor dynamisch fieldLabels ändern war 3.0.1

Nach 3.0.1 Ich glaube, das

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

Sie arbeitet, kann dies nur tun, wenn das Feld gemacht worden ist.

+0

Ja es funktioniert :). Vielen Dank, das ist die genaue Antwort, nach der ich gesucht habe. – Zango

+4

Es ist jetzt "LabelEl", nicht "Label" ... –

5

konnte nicht label-Eigenschaft in einem Feld Objekt in Ext 4 statt finden dies für mich gearbeitet:

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

Wenn Sie ein Label mit HTML, die beste Lösung für ExtJS 4 ist mit Update-Methode hinzufügen möchten (Aktualisierungsmethode ist in labelEl, nicht in label):

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

+0

Das hat gut funktioniert. Wie bekomme ich den Label-Wert danach? Der Aufruf von field.getFieldLabel() gibt den OLD-Wert zurück: - / – Geo

4

Mit ExtJS 4.2 das funktioniert für mich:

field.setFieldLabel('New Label');

2

Ich habe über das gleiche Problem nur kommen, aber in meiner Situation der Etiketten bereits gemacht werden können oder nicht. so musste ich beiden Fälle abdecken:

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

ich es in ExtJS 3.2 getestet

0

In ExtJS 3.4.0, die erste Zeile in der Funktion funktioniert nicht.

mit diesem ersetzen:

//var el = field.el.dom.parentNode.parentNode; 
var el = Ext.getCmp(field).getEl().dom.parentNode.parentNode; 
Verwandte Themen