ナビゲーション ビュー内にネストされたカード レイアウトを持つ Ext.Panel があります。これを行ったのは、マップとリストを簡単に切り替えて、ポップしてからまったく別のビューをプッシュする必要がないためです (基本的にはアニメーションを避けるためです)。したがって、コントローラーでアクションを起動するボタンがナビゲーションバーにあります。リストを含むこの初期ビューは問題なくロードされますが、(setActiveItem() を使用して) ビューを切り替えるコントローラー コードは機能しません。エラー メッセージはありません。show() を呼び出さなければならないバグを見つけました。これは機能しますが、navigaionBar の上に新しい activeItem (この場合はマップ) をオーバーレイします! (スクリーンショットを参照)。また、ラッパーの構成でactiveItemを手動で1に変更すると、リストと同じようにマップがうまく表示されます。
私のラッパーパネルは次のようになります。
Ext.define(ViewInfos.VendorWrapper.ViewName,{
extend: 'Ext.Panel',
id: ViewInfos.VendorWrapper.PanelId,
xtype: ViewInfos.VendorWrapper.Xtype,
config:
{
layout: 'card',
title: Resources.VendorsNearby,
activeItem: 0,
items: [
{
xtype: ViewInfos.VendorList.Xtype, //Initially shown, a list
},
{
xtype: ViewInfos.VendorMap.Xtype, //What I'm trying to show, a map
}
]
}
});
ここに私のコントローラーコードがあります:
Ext.define('OrderMapper.controller.VendorWrapper', {
extend: 'Ext.app.Controller',
config: {
refs: {
vendorMap: ViewInfos.VendorMap.Xtype,
vendorList: ViewInfos.VendorList.Xtype,
vendorWrapper: ViewInfos.VendorWrapper.Xtype,
main: ViewInfos.Main.Xtype,
vendorToggleButton: (ViewInfos.Main.Xtype + ' button[action=vendorViewToggle]')
},
control: {
vendorToggleButton:{
tap: function(){
var curView = this.getVendorWrapper().getActiveItem().id;
//active view == VendorList
if(curView == 'VendorList'){
//this shows up in the console
console.log('vendorToggleButton tapped, switching to map');
this.getVendorWrapper().setActiveItem(1);
//without this line, the view doesn't even change
this.getVendorWrapper().show();
this.getVendorToggleButton().setText('List');
}
//active view == VendorMap
else if (curView == 'VendorMap'){
console.log('vendorToggleButton tapped, switching to list');
this.getVendorWrapper().setActiveItem(0);
this.getVendorToggleButton().setText('Map');
}
}
}
}
}
そして、これが発生する不安定なビューのスクリーンショットですthis.getVendorWrapper().show()
また、ラッパーを (カード レイアウトの通常のパネルではなく) カルーセルに変更しようとしましたが、カルーセルはスワイプしてリスト/マップを変更しますが、setActiveItem() はまだ機能しません。