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