クラス定義時にコンポーネントを作成することはできません。それはExt.define
のconfigオブジェクト内に直接Ext.create
を使用して、次のとおりです。
Ext.define('App.views.Panel1', {
id:'panel1',
extend:'Ext.Panel',
config:{
title: 'test',
layout:'card',
items:[
{
items:[
{
xtype: 'button',
text: 'TEST',
handler:function(){
Ext.getCmp('panel1').setActiveItem(Ext.getCmp('panel2'));
}
}
]
},
// not good
Ext.create('App.views.Panel2', {id:'panel2'})
]
}
});
これがうまくいく場合であっても、それが1つのPanel2インスタンスを共有するパネル1のすべてのインスタンスになります。
代わりに使用すると、初期化時に、あなたのコンポーネントの作成を行う必要があります。
Ext.define('App.views.Panel1', {
id:'panel1',
extend:'Ext.Panel',
config:{
title: 'test',
layout:'card',
items:[
{
items:[
{
xtype: 'button',
text: 'TEST',
handler:function(){
Ext.getCmp('panel1').setActiveItem(Ext.getCmp('panel2'));
}
}
]
}
]
},
initialize: function() {
this.add(Ext.create('App.views.Panel2', {id:'panel2'}));
this.callParent();
}
});
initialize
方法は、あなたがあなたのコンポーネントクラスのインスタンスを作成するたびにやりたい余分な作業のいずれかの種類を行うには良い場所です。 callParent
が存在するのは、親クラスのうちinitialize
がオーバーライドされているためです。
拡張するには、Ext.create *をExt.applicationの前に使用することはできません。 –
このような制限はありません。 Ext.applicationをまったく使用せずにsencha-touch appを作成することができます。 Ext.create()を使用して、作成しているコンポーネントに対してfullscreen:trueを設定します。 –
それはフォーラムの開発者が示したものではありません。 –