2012-02-03 6 views
2

は、次のような形式であり、私はアクセスform`sはExt.getCmpを(使用せずに、フォーム内のボタンを適用したい)と、ボタンのidを定義する:extjs4で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,} ]} 

答えて

2

あなたはこのフォームで解雇「dirtychange」イベントをリッスンするためにコントローラを使用することができます。

darrenの回答は確かに機能しますが、これはコンポーネントクエリを使用して、コンポーネントへの到達と制御の方法が異なります。たとえば、フォーム内で一連のボタンを有効にする場合は、 'text = Apply'を削除して、フォームのボタンの配列をすべて返すことができます。

1

は、コンストラクタを使用して、あなたが作成することができますボタンをクリックしてフォームに参照してください。フォーム内で参照を取得したら、そこにあるリスナーから参照を取得できます。次のようになります。Ext.getCmpを使用せずに動作するはず

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

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

を()

1

jthirauと合意 - コンポーネントクエリを使用します。

あなたがやっていることをするもう一つの方法は、単にボタンハンドラを追加することです。これはボタンの右に行くconfig:

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

私が知る限り、ボタンはあなたがボタンを押したときにトリガーされ、これは私の場合ではありません。とにかく –

関連する問題