1

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

隐藏字段从中检索它的值,显示字段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,但是因为我不想改变它的值我应该怎么做?

我只想根据我从服务器通过“myHidden”字段获得的值更改表单加载时“myText”的映射。

谢谢你的帮助。

4

2 回答 2

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
});
于 2013-03-13T11:26:48.503 回答
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'
    }]    
于 2013-03-14T12:32:38.323 回答