Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   textfield, передать "false" в "disabled" (https://javascript.ru/forum/extjs/27980-textfield-peredat-false-v-disabled.html)

wUI 02.05.2012 09:59

textfield, передать "false" в "disabled"
 
Всем доброго времени суток=)
Есть два объекта:
{ 
  xtype: 'textfield',
  name: 'mName',
  emptyText: 'значение mName',
  disabled: true, // по умолчанию выставляю объект не активным
  fieldLabel: 'mName значение',
  allowBlank: false 
},{
  xtype: 'fieldcontainer',
  id: 'checkPanel',
  defaultType: 'checkboxfield',
  items: [{
            boxLabel  : 'Ввод значений mName',
            name      : 'cbName',
            inputValue: '1',
            id        : 'checkbox1'
            }]
}

Необходимо по нажатию на "cbName" передавать в "mName" значение disabled: false.
Как понимаю есть два решения, и в обоих я застрял:
1. Listeners у объекта "mName".

listeners: {
   ... // собственно не понимаю на какое событие вешать прослушку.
}


2. handler у объекта "cbName".
handler: function () {
   var sendString = Ext.getCmp('checkPanel').getValue();
   ... // не совсем ясно как передать полученное значение для mName.
}

Прошу помощи в этом вопросе :)

nekto_O 02.05.2012 10:44

example:
var items = [{
  xtype: 'textfield',
  name: 'mName',
  emptyText: 'значение mName',
  disabled: true, // по умолчанию выставляю объект не активным
  fieldLabel: 'mName значение',
  allowBlank: false
},{
  xtype: 'fieldcontainer',
  id: 'checkPanel',
  defaultType: 'checkboxfield',
  items: [{
      boxLabel: 'Ввод значений mName',
      name: 'cbName',
      inputValue: '1',
      listeners: {
          change: function() {
              this.up('panel').down('textfield').setDisabled(!this.checked);
          }
      },
      id: 'checkbox1'
   }]
}];
      
Ext.create('Ext.panel.Panel', {
    items: items,
    renderTo: Ext.getBody()
});

wUI 02.05.2012 11:13

nekto_O,
Спасибо огромное за исчерпывающий пример.=) Конкретно меня интересовало только часть:
listeners: {
   change: function() {
      this.up('panel').down('textfield').setDisabled(!this.checked);
   }
}

но с дополненым кодом, будет нагляднее для всех ищущих;)

wUI 02.05.2012 11:35

nekto_O,
Сразу возник еще вопрос.
В строке this.up('panel').down('textfield').setDisabled(!th is.checked);,
мы выбираем родителя текущего объекта и дочернему объекту "textfield" передаем уже значение нашего параметра.
Но возникла такая ситуация, если к примеру в Итемах у нас перед "textfield", стоит еще:
{
        xtype: 'datefield',
        fieldLabel: 'дата',
        id: 'startDate',
        name: 'nameStartDate',
        format:'d-m-Y',
        maxValue: new Date()
        },

тогда скрипт скрипт отрабатывает иначе: по нажатию на чекбокс, поле с выбором даты затемнится, а наше поле с текстом остается неудел.
Возможно ли более конкретно указывать элемент которому передается "false" в "disabled"? Например по id.

wUI 02.05.2012 11:46

Сделал вот таким образом:
Ext.getCmp('idElement').setDisabled(!this.checked);

vitaliy.khmurach 03.05.2012 12:25

Так тоже должно работать:

listeners: {
   change: function() {
      this.up('panel').down('textfield[name="mName"]').setDisabled(!this.checked);
   }
}


Часовой пояс GMT +3, время: 05:13.