Extjs在渲染字段后更改fieldLabel.更好的解决方案?

Zan*_*ngo 19 javascript extjs

我研究了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);
Run Code Online (Sandbox Code Playgroud)

Dav*_*ung 22

访问dom以动态更改fieldLabels是3.0.1之前的版本

在3.0.1之后,我相信这是有效的

field.labelEl.update('New label');
Run Code Online (Sandbox Code Playgroud)

只有在渲染字段后才能执行此操作.


Jua*_*món 12

如果你想用HTML添加标签,ExtJs 4的最佳解决方案是使用更新方法(更新方法在labelEl中,而不在标签中):

field.labelEl.update('新标签');


Mar*_*cio 5

无法在Ext 4中的字段对象中找到label属性,而这对我有用:

field.labelEl.dom.innerText = 'New Label';
Run Code Online (Sandbox Code Playgroud)


小智 5

对于 ExtJS 4.2,这对我有用:

field.setFieldLabel('New Label');


NDM*_*NDM 5

我刚刚遇到了同样的问题,但在我的情况下,标签可能已经被渲染,也可能没有。所以我必须涵盖这两种情况:

var newLabel = 'new label';
if (!field.rendered) field.fieldLabel = newLabel;
else field.label.update(newLabel);
Run Code Online (Sandbox Code Playgroud)

我在 ExtJS 3.2 中测试了它