2010-07-23 8 views
18

मैंने जांच की कि कैसे ExtJs डोम में फॉर्म के फ़ील्ड प्रस्तुत करता है। क्षेत्र बदलने के बाद फ़ील्ड लेबल बदलने के लिए मुझे उचित डोम तत्व मिलता है और इसके आंतरिक HTML को बदलता है;Extjs फ़ील्ड के बाद फ़ील्ड लेबल बदल दिया जाता है। कोई बेहतर समाधान?

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

डोम गतिशील fieldLabels बदलने के लिए पहुँचना पूर्व 3.0.1

था 3.0.1 के बाद मेरा मानना ​​है कि यह काम करता है

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

आप केवल यह कर सकते हैं एक बार क्षेत्र में प्रदान की जा चुकी है।

field.labelEl.dom.innerText = 'New Label'; 
+0

हाँ यह काम करता है :)। बहुत बहुत धन्यवाद, यह सही जवाब है जिसे मैं ढूंढ रहा था। – Zango

+4

अब यह 'लेबल एएल' है, न कि' लेबल' ... –

5

Ext 4 बजाय यह मेरे लिए काम किया में एक क्षेत्र वस्तु में लेबल संपत्ति नहीं मिल सका (अद्यतन विधि लेबल में है, लेबल में नहीं):

field.labelEl.update ('नया लेबल');

12

आप ExtJs 4 के लिए सबसे अच्छा समाधान HTML के साथ एक लेबल जोड़ना चाहते हैं अद्यतन विधि के साथ है:

+0

यह ठीक काम करता है। हालांकि, इसके बाद मैं लेबल मूल्य कैसे प्राप्त करूं? कॉलिंग फ़ील्ड .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; 
संबंधित मुद्दे