Extjs - 隐藏字段内容的textlabel值更改

时间:2013-03-13 10:58:38

标签: function extjs hidden xtype

我试图根据另一个字段(隐藏)上的值更改表单内显示字段的值。

隐藏字段从mapping中检索它的值,显示字段也将从映射中检索内容,但是根据隐藏值从两个不同的值(mapping1,mapping2)中检索。这就是我想要做的事情:

mapping: ['myHidden''mapping1','mapping2'],
form: [{
    fieldLabel: 'myHidden',
    xtype: 'hidden',
    name: 'myHidden',
    listeners: {
          'change': function(){
                   if(this.getValue=='X'){
                         this.up('form').findfield('myText').setName('mapping1');
                   }
                   else{
                         this.up('form').findfield('myText').setName('mapping2');
                    }
                }
            }
    },{
        fieldLabel: 'myText', 
        xtype: 'displayfield'
    }]      

由于我没有找到映射到myText'由name标记给出,但由于我不想改变它的价值我应该怎么做?

我只是想改变' myText'的映射。表单加载基于我从服务器槽获得的值' myHidden'字段。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您正在为文本字段(name)的关键配置定义函数。你为什么要做这样的事? 好吧回到我的回答..

您希望在什么时候更改文本字段值?当隐藏字段获得值?此代码适用于您:

{
  xtype: 'hidden',
  id: 'myHidden',//Do you really want an id?
  name: 'myHidden',
  listeners: {
    change: function(){
        //this piece of code changes the textfield to the same value as the hidden field when the hidden field value changes.
        this.up('form').findfield('myTextField').setValue(this.getValue());
    }
  }
},{
  fieldLabel: 'myText', 
  xtype: 'displayfield',        
  name: 'myTextField'
}

解决此问题的最佳方法IMO是创建一个包含隐藏字段和字段的容器。这样,隐藏字段值将由表单发布,而不是来自其他字段的值。你会得到这样的东西:

Ext.define('LookupField', {
    extend: 'Ext.container.Container',
    alias: 'widget.lookupfield',

    constructor: function (config) {
        var me = this;
        var hiddenFieldName = me.name;
        var triggerFieldName = "Display" + me.name;

        me.hiddenField = Ext.create('Ext.form.field.Hidden', {
            name: hiddenFieldName,
            hidden: true
        });

        me.triggerField = Ext.create('Ext.form.field.Trigger', {
            name: triggerFieldName,
            triggerCls: 'x-form-search-trigger',
            editable: false,
            submitValue: false,
            enableKeyEvents: true,
            onTriggerClick: function () {
            }//eo onTriggerClick
        });
        //Add config to the triggerfield
        Ext.applyIf(me.triggerField, config);
        //Add the hiddenfield and triggerfield to the container
        me.items = [me.hiddenField, me.triggerField];
        me.callParent(arguments);
    }//eo initComponent
});

答案 1 :(得分:1)

我已经能够得到第一个按照我的意愿工作的例子。我不知道这是否是最好的解决方案,但我会把它放在这里,这样如果您遇到同样的问题就可以使用它。

基本上我已将值映射到隐藏字段,然后根据myHidden上的值更改显示字段的内容

mapping: ['myHidden''mapping1','mapping2'],
form: [{
    fieldLabel: 'mapping1',
    xtype: 'hidden',
    id: 'mapping1',
},{
    fieldLabel: 'mapping2',
    xtype: 'hidden',
    id: 'mapping2',
},{
    fieldLabel: 'myHidden',
    xtype: 'hidden',
    name: 'myHidden',
    listeners: {
          'change': function(){
                   if(this.getValue=='X'){
                         Ext.getCmp('myText').setValue(Ext.getCmp('mapping1').getValue());
                   }
                   else{
                         Ext.getCmp('myText').setValue(Ext.getCmp('mapping2').getValue());
                    }
                }
            }
    },{
        fieldLabel: 'myText', 
        xtype: 'displayfield',
        id: 'myText'
    }]