2013-03-13 1 views
1

Я пытаюсь изменить значение поля отображения внутри формы в соответствии со значением в другом поле (скрыто).Extjs - изменение значения текстовой метки в содержимом скрытого поля

Скрытое поле возвращает его значение от 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' 
    }]  

Как я undestand отображение к «MYTEXT» задается name тега, но так как я wan't изменить это значение Как я должен это делать?

Я просто хочу изменить отображение 'myText' на загрузке формы на основе значения, которое я получаю из поля «myHidden» на сервере.

спасибо, что вам помогли.

ответ

1

Я смог получить первый пример, чтобы работать так, как я хотел. Я не знаю, является ли это лучшим решением, но я поместил его здесь, чтобы вы могли использовать его, если сталкиваетесь с той же проблемой.

В основном я сопоставляются значения скрытых полей, а затем изменить содержание displayfield в соответствии со значением на 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' 
    }]  
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' 
} 

Лучший способ решить эту проблему ИМО создать контейнер с скрытое и поля в нем. Таким образом, значение скрытого поля будет отправлено по форме, а не по значению из другого поля. Вы получите что-то вроде этого:

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 
}); 
+0

Привет, Я попробовал ваш первый решение и не увенчались успехом. Я использую ExtJS 3.0 кстати. Я отредактировал вопрос с более полным примером того, чего я хочу достичь. Спасибо за помощь. – mikethe