Как включить / отключить кнопку формы без использования Ext.getCmp () в extjs4? - PullRequest
2 голосов
/ 03 февраля 2012

Вот следующая форма, и я хочу получить доступ к кнопке применения формы внутри формы без использования Ext.getCmp () и определения идентификатора кнопки:

{xtype : 'form',
url : 'index.php/submitform',
trackResetOnLoad : true,
id : 'generalprofilebasicinformation'+ this.getId(),
listeners : {
//is fired when the form is dirty(field values are modified)
    dirtychange : {
        fn : function(sm) {
    //Here Is my problem:
//How to  access to Apply button or any other buttons defined inside the form???
            var applyButton = this.Button;
   applyButton.enable();}}},
   buttons : [{
            text : 'Apply',
            formBind : true, // only
            // enabled
            // once the
            // form is
            // valid
            disabled : true,} ]}

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

Вы можете использовать контроллер для прослушивания события dirtychange, запускаемого этой формой.

//controller init 
init: function() {
    this.control({
        'form': {
            dirtychange: function(form) {
                var button = form.owner.query('button[text=Apply]');
                button[0].enable();             
            }
        }
    });
}

Ответ, который дал Даррен, безусловно, сработает, он просто использует запросы компонентов, чтобы дать вам другой способ доступа и управления компонентами.Например, если вы хотите включить ряд кнопок в форме, вы можете удалить «text = Apply», и будет возвращен массив всех кнопок форм.

1 голос
/ 04 февраля 2012

Согласен с jthirau - обязательно используйте компонентный запрос.

Другой способ сделать то, что вы делаете, - просто добавить обработчик кнопок.Это идет прямо на кнопку конфигурации:

handler:function(){
  //do something
}
1 голос
/ 04 февраля 2012

Используйте конструктор, затем вы можете создать внутри него кнопку, а затем указать ссылку на нее в форме.Если у вас есть ссылка в форме, вы можете получить ее у прослушивателя, который у вас там есть.Выглядело бы так:

contructor: function(config) {
   this.button = new Ext.Button({
       // Provide your button config here
   });
}

listeners: {
   dirtychange: function(sm) {
       this.button.enable();
   }
}

Это должно работать без использования Ext.getCmp ()

...