1

別のフィールド (非表示) の値に従って、フォーム内の表示フィールドの値を変更しようとしています。

非表示フィールドは値を取得し、表示フィールドmappingもマッピングからコンテンツを取得しますが、非表示値に従って 2 つの異なる値 (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。なぜそんなことをするのですか?
私の答えに戻ります..

テキストフィールドの値をどの時点で変更しますか? hiddenfield が値を取得するのはいつですか? このコードはあなたのために働くでしょう:

{
  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 でこの問題を解決する最善の方法は、hiddenfield とその中にフィールドを持つコンテナーを作成することです。このようにして、他のフィールドからの値ではなく、hiddenfield 値がフォームによって投稿されます。次のようなものが得られます。

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 に答える