1

showConditionビュー構成内のいくつかの項目にカスタム プロパティを指定しました。そのようなすべてのコンポーネントを照会するにはどうすればよいですか?

Ext.ComponentQuery.query()を試しました。問題は、query()正しい数の要素が返されることですが、「実際の」コンポーネントがないことです。つまり、elements[0].hide() を実行しようとすると、効果がありません。

refコントローラークラスで同じ要素を使用すると、hide()完全に機能 することに気付きました。

その後console.log、要素を取得する両方の方法の結果を調べて、奇妙なことに気付きました。まず、返される要素には異なる htmlid属性 (textfield-1115textfield-1089) があります。次に、query()メソッドによって返される要素には既に hidden=true プロパティがあります (これが hide() が効果がない理由です)。どちらの要素もtextfieldコンポーネントです。

以下は関連するコード部分です。重要なのは ですonAfterRenderForm()

ビューで:

Ext.define('MyApp.view.Test', {
    extend: 'Ext.container.Container',
    alias: 'widget.test',

    layout: 'fit',

    initComponent: function() {
        Ext.apply(this, {
            items: [
                {
                    title: 'form',
                    itemId: 'myForm',
                    xtype: 'form',
                    items: [
                        {
                            xtype: 'textfield',
                            fieldLabel: 'code',
                            showCondition: 'is-root',
                            allowBlank: false,
                            vtype: 'alphanum'
                        }
                    ]
                }
            ]
        });
        this.callParent(arguments);
    }
});

コントローラーで:

Ext.define('MyApp.controller.Test', {
    extend: 'Ext.app.Controller',

    requires: [
        'MyApp.view.Test'
    ],

    refs: [
        {
            ref: 'codeField', selector: '[showCondition]'
        }
    ],

    init: function() {
        this.control(
            {
                '#myForm': {
                    afterrender: this.onAfterRenderForm
                }
        );
    },

    onAfterRenderForm: function(oForm) {
        var elements = oForm.query('[showCondition]');
        console.log(elements[0]);
        console.log(this.getCodeField());
        if(elements[0].id == this.getCodeField().id)
            alert('Elements are not the same!!!');
    }
});
4

1 に答える 1

2

これ:

refs: [{
    ref: 'codeField', selector: '[showCondition']
}]

とは微妙に異なりoForm.query('[showCondition]')[0]ます。

あなたのためrefに、定義された showCondition 値で見つかった最初のコンポーネントを取得します。では、定義済みの showCondition 値を持つoForm の子であるoForm.query最初のコンポーネントを取得しています。

つまり、アプリ内のいずれかのビューに showCondition が定義された他のフィールドがある場合、ref に対して生成された getter を呼び出すと、それらのフィールドのいずれかが返される可能性があります。それは、Ext がそれらをどの順序で配置するかによって異なります。

いくつかのことが起こっているように思えます

  1. アプリには showCondition が定義されているが、コントローラーが見ているフォームにない他のフィールドがあります。
  2. ビューは非表示の状態でレンダリングされています。カード レイアウトなどのアイテムとして追加されていますか?
于 2013-03-16T17:41:48.717 に答える