1

重複の可能性:
Extjs4.1、up() down() 対 Ext.getCmp()

ExtJS (常にバージョン 4) をよく使用しましたが、コンポーネントを取得する適切な方法を理解するのにまだ問題があります。

それを行うには多くの方法があり、どちらもグローバルです。

  • Ext.getCmp ()
  • Ext.ComponentQuery.query ()

および内部:

  • Ext.container.AbstractContainer.down ()
  • Ext.container.AbstractContainer.up ()
  • Ext.container.AbstractContainer.nextSibling ()
  • Ext.container.AbstractContainer.nextNode ()
  • Ext.container.AbstractContainer.previousSibling ()
  • Ext.container.AbstractContainer.previousNode ()
  • Ext.container.AbstractContainer.child ()
  • Ext.container.AbstractContainer.findParent ()
  • Ext.container.AbstractContainer.findParentBy ()
  • Ext.container.AbstractContainer.query ()
  • Ext.container.AbstractContainer.queryBy ()
  • Ext.container.AbstractContainer.queryById ()

ここで、すべてのコンポーネント (ボタン、チェックボックス、グリッドなど) にidを使用すると、メイン コンテナーのレイアウトが変更された場合でも、常にそれらを確実に取得できます。グローバルな方法に従って行うことができます。ただし、この種の検索はアプリケーションのパフォーマンスに影響を与える可能性があります。正直なところ、どのように機能するかはわかりませんがExt.getCmp ()、検索は変数の名前空間全体で行われると思います。

そのため、この問題により、私は時々 2 番目の方法に従うようになりました。メインコンテナのレイアウトを変更すると問題が発生します。次の例を見てください。

Ext.create ('Ext.panel.Panel', {
    title: 'Main Container' ,
    width: 300 ,
    renderTo: Ext.getBody () ,
    items: [{
        xtype: 'textfield' ,
        fieldLabel: 'First name'
    } , {
        xtype: 'textfield' ,
        id: 'tfLastName' ,
        fieldLabel: 'Last name'
    } , {
        xtype: 'checkbox' ,
        boxLabel: 'Alive'
    }] ,

    bbar: {
        xtype: 'toolbar' ,
        items: [{
            xtype: 'button' ,
            text: 'Get CheckBox' ,
            // Gets the checkbox starting from the second textfield (Last Name)
            handler: function (btn) {
                var tfLastName = Ext.getCmp ('tfLastName');
                console.log (tfLastName.nextSibling ('checkbox'));
            }
        }]
    }
});

[チェックボックスを取得] ボタンをクリックすると、要求したチェックボックスが返されますが、メイン コンテナー項目の順序を変更すると (チェックボックス宣言を [姓]テキストフィールドの前に置くとします)、予想どおり null が返されます。さて、これが問題です。ビューを変更するときにロジックを変更したくありません。

だから、私の質問は次のとおりです。

  • Id を使用せずにコンポーネントを取得し、ビューの変更中にロジックを変更しないようにする機能はありますか?
  • コンポーネントを取得する適切な方法はありますか? はいの場合、何ですか?
4

0 に答える 0