6

フォームのすべてのフィールドに readOnly プロパティを設定するメソッドを作成しようとしています。

私のコード:

Ext.override(Ext.form.Panel,{

setReadOnlyForAll: function(bReadOnly) {

    this.cascade(function(f) {
      if (f.isFormField) {
         f.setReadOnly(bReadOnly);
      }
    });
});

Ext.form.Panel からこのメソッドを呼び出します。

this.setReadOnlyForAll(false); 

しかし、この方法は非常にゆっくりとしか機能しません。速度を上げる方法を誰か知っていますか? ありがとうございました!

4

3 に答える 3

6

cascade現在のコンテナ ( などExt.form.Panel) のすべての子をチェックします。これは、現在の子がフォーム フィールドであるかどうかを確認する必要があることを意味します。したがって、Ext.form.Basic.getFieldsメソッドを使用してすべてのフォーム フィールドを取得します。

Ext.define ('Your_form_Panel', {
  extend: 'Ext.form.Panel' ,
  setReadOnlyForAll: function (bReadOnly) {
    this.getForm().getFields().each (function (field) {
      field.setReadOnly (bReadOnly);
    });
  }
});

さらに、Ext.defineの代わりに使用することをお勧めしますExt.override

于 2012-10-15T17:28:59.830 に答える
2

それは簡単です。この構成をフォームに追加するだけです:

            var formPanel = Ext.create('Ext.form.Panel', {


                fieldDefaults: {
                    labelAlign: 'right',
                    labelWidth: 85,
                    msgTarget: 'side',
                    readOnly : true //all fiels are in readOnly mode
                },

                defaultType: 'textfield',

                items: [{
                        fieldLabel: 'Nome',
                        name: 'nome'
                    }, {
                        fieldLabel: 'Cognome',
                        name: 'cognome'
                    }
                    ]
                }],

            });
于 2014-11-12T17:04:31.457 に答える