2010-07-23 17 views
18

Sprawdziłem, jak ExtJs renderuje pola formularza w dom. Aby zmienić pole fieldLabel po renderowaniu pola znajduję właściwy element dom i zmieniam jego innerHTML;Extjs zmienia poleLabela po polu jest renderowany. Jakieś lepsze rozwiązanie?

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

Odpowiedz

22

Dostęp DOM dynamicznie zmieniać fieldLabels wstępnie 3.0.1

Po 3.0.1 Wierzę, że to działa

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

Można to zrobić tylko raz pole zostało wydane.

+0

Tak to działa :). Dziękuję bardzo, to jest dokładna odpowiedź, której szukałem. – Zango

+4

To jest teraz 'labelEl', a nie' label' ... –

5

nie mógł znaleźć nieruchomość etykiety w polu obiektu w Ext 4 zamiast tego pracował dla mnie:

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

Jeśli chcesz dodać etykietę z HTML najlepsze rozwiązanie dla ExtJS 4 jest metodą aktualizacji (metoda aktualizacji znajduje się w etykiecieEl, a nie na etykiecie):

field.labelEl.update ("Nowa etykieta");

+0

To działało dobrze. Jak jednak uzyskać wartość etykiety po tym? Wywołanie metody field.getFieldLabel() zwraca wartość OLD: - / – Geo

4

Z ExtJS 4.2 działa to dla mnie:

field.setFieldLabel('New Label');

2

Właśnie natknąć się w tej samej sprawie, ale w mojej sytuacji etykiety mogą być już świadczone, czy nie. musiałem więc obejmować zarówno przypadki:

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

testowałem go w ExtJS 3.2

0

W ExtJS 3.4.0, pierwsza linia w funkcji nie działa.

Wymień to:

//var el = field.el.dom.parentNode.parentNode; 
var el = Ext.getCmp(field).getEl().dom.parentNode.parentNode; 
Powiązane problemy