2012-02-16 6 views
2

私はextjsフォームを作成しました。これは、列レイアウトを使用して2つの部分に分割されており、入力要素はほぼ10-15です。どのようにこれらの入力要素を条件ごとに一度に無効にすることができますか?現在、私は、フォーム内のすべてのコンポーネントをfetchs機能を作成しているし、ここではそれらをExtjs 4:Extjsフォーム内のすべての入力要素を一度に無効にする

を無効にするために、各要素をext.eachループを使用すると、私は

function prepare_form_view(form){ 
    var f=Ext.getCmp(form); 
    var els=f.query('component'); 
    Ext.each(els,function(o){ 
     var xtype=o.getXType(); 
     if(xtype=='textfield'||xtype=='combobox'||xtype=='datefield'||xtype=='textareafield'||xtype=='button'){ 
      o.disabledCls='myDisabledClass'; 
      o.disable(); 
     } 
    }); 
} 

を使用する機能はとても任意の代替方法はありますされますそれぞれの要素をループせずにすべての要素を無効にすることができます。 この機能を他の形式と併用したい場合もあります。私は 'setFieldDefult'関数のようなものを探しています。

+0

参照[リンク](:-) http://stackoverflow.com/questions/9368466/extjs4-how-to-disable-all-fields-and-all-パネル上のボタンを再帰的に) – A1rPun

答えて

1

ここに提案があります。あなたのフォームは2つの部分に分かれていますので、FieldSetに入れてください。 1つの方法(例:setDisabled)でフィールドセット全体を無効にすることができます。

これにより、コンポーネントのループが回避され、コンポーネントのループが1つずつ無効/有効になります。

+0

返信ありがとうございましたAbdel。しかし私は言ったように、私は他のフォームでもこの関数を使いたいと言っていました。そして、異なるフォームは異なるレイアウトを持っています... – Nick

0

ExtJsの方法であるフォームパネルのcascade関数を使用できますが、カスケード関数のソースコードを確認すると、forループも使用されます。カスケード関数を使用する唯一の利点は、ネストされたパネルを持つフォームでも機能することです。私はあなたの実装が適切なケースでは機能しないと思います。

3

パネルの無効化/有効化の方法はどうですか?これはずっと簡単です。

panel.disable(); 

panel.enable(); 
+0

これはパネルのツールバーも無効にします。 –

7

あなたはExtJSの4.xでFormPanelを使用している場合、これはあなたが探しているものである -

yourFormPanel.getForm().applyToFields({disabled:true}); 

getForm()方法はまた、このクラスで、Ext.form.Basicオブジェクトを返します。このフォームのすべてのフィールドにgetFields()でアクセスすると、すべてのフィールドを反復処理して何かを行うことができます。

、このことができます希望と幸運

+0

は4.2で同じことを試みましたが、私にとってはうまくいきませんでした。 – sparsh610

関連する問題