我试图根据另一个字段(隐藏)上的值更改表单内显示字段的值。
隐藏字段从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'字段。
谢谢你的帮助。
答案 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'
}]