2012-02-03 3 views
2

Вот следующий вид и я хочу form`s доступа кнопки применить в форме без использования Ext.getCmp() и определения идентификатора для кнопки:Как включить/отключить кнопку формы без использования Ext.getCmp() в extjs4?

{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,} ]} 

ответ

2

Вы можете использовать контроллер для прослушивания «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

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

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

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

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

1

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

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

handler:function(){ 
    //do something 
} 
+0

Насколько я знаю, кнопка будет запущена, когда вы НАЖМИТЕ кнопку, и это не мое дело. Спасибо в любом случае –

Смежные вопросы