0

このチェックボックスの値を取得しようとしています

 Ext.define('myRoot.myExtApp.myForm', {
    extend: 'Ext.form.Panel',
    layout: {
      type: 'vbox',
      align: 'stretch'
    },
    scope: this,
    constructor: function() {
       this.callParent(arguments);

       this.myFieldSet = Ext.create('Ext.form.FieldSet', {
         scope: this,
         columnWidth: 0.5,
         collapsible: false,
         defaultType: 'textfield',
         layout: {
             type: 'hbox', align: 'stretch'
         }
       });

       this.mySecondForm = Ext.create('myRoot.myExtApp.myForm2', {
         scope: this,
         listener: this,
         margin: '1 3 0 0'
       });
       this.myCheckBox = Ext.create('Ext.form.Checkbox', {
           scope: this,
           //id: 'myCheckBox',
           boxLabel: 'Active',
           name: 'Active',
           checked: true,
           horizontal: true
       });

       this.myFieldSet.add(this.mySecondForm);
       this.myFieldSet.add(this.myCheckBox);

       this.add(this.myFieldSet);
     }
 });

ご覧のとおり、別のフォームがあります

Ext.define('myRoot.myExtApp.myForm2', {

「myForm」からチェックボックスの値を取得するハンドラーがある場所

Ext.getCmp を使用せずに Form2 からチェックボックスの値を取得するにはどうすればよいですか? そうすれば、チェックボックスの値を取得できることを知っています

Ext.getCmp('myCheckBox').getValue();

しかし、使用して

this.myCheckBox.getValue();

未定義のエラーが発生します。

更新- Wared の提案により、myForm2 内でこれを試しました

this.temp=Ext.create('myRoot.myExtApp.myForm'), {});
var tempV = this.temp.myCheckBox.getValue();

値を取得できましたが、ボックスのチェックを外しても同じ真の値を取得します

4

2 に答える 2

1

コンポーネントクエリの過度の使用によるパフォーマンスの低下について心配していると思います。getCmpコンポーネントクエリを最小限に抑えるための優れたトリックは、最初の呼び出しの結果をキャッシュするために、クロージャ内に新しいメソッドを定義することです。メソッドの定義をクロージャ内にラップすることで、グローバルスコープや役に立たないクラスプロパティの使用を回避できます。

getMyCmp: function (cmp) { 
    // "cmp" does not exist outside this function
    return function () { 
        return cmp = cmp || Ext.getCmp('#myCmp'); 
    }; 
}()
于 2013-03-12T09:38:19.523 に答える
1

1つの解決策は次のとおりです。

myRoot.myExtApp.myForm.myCheckBox.getValue();

注意してください、間違った答え。有効な解決策については、以下のコメントを参照してください。

于 2013-03-05T13:00:31.340 に答える