2011-01-02 15 views
4

私はそれの中にExt.PanelExt.TabBarの適度に複雑な構成のSencha Touchアプリをプログラミングしています。Ext.layout.CardLayoutにはフルスクリーンが必要ですか?

しかし、私のExt.Panel、それに設定されたfullscreen: true財産持っていない時に神秘的な問題の中でExt.layout.CardLayout実行を使用して:私はそれがコンセプトの私の証明ではありませんでしたpanel.setActiveItem()メソッドを呼び出すようにしようとすると、それはTypeError: Object card has no method 'setActiveItem'をスローしますバージョンがfullscreen: trueになっていました。

私はこのようにロードされた煎茶タッチライブラリをページでChromeのコンソール上で問題を再現することができます

> var p1 = new Ext.Panel({layout:'card', items:[{html:'a'},{html:'b'}]}) 
undefined 
> p1.setActiveItem(0) 
TypeError: Object card has no method 'setActiveItem' 

そしてそれは.fullscreenプロパティでは発生しません:

> var p2 = new Ext.Panel({fullscreen: true, 
          layout:'card', 
          items:[{html:'a'},{html:'b'}]}) 
undefined 
> p2.setActiveItem(0) 
subclass 

何与えるか?

バージョン情報:

私は煎茶タッチ1.0.1a

アップデート1(1月3日、〜10.30UTC + 1H)、デバッガと周りのステッピングと発見のものを使用していますを設定するだけでは、実際に作成される実際のExt.layout.CardLayoutオブジェクトの作成はトリガーされません。 .setActiveItem()はcompentの.layoutプロパティに委任しようとするため、ほとんど即座に失敗します。しかし、新しいExt.layout.CardLayout.layoutを設定するラインの下のより多くの問題を引き起こす。..

アップデート2:(1月3日、〜12:25UTC + 1H)それはすべてに挿入/レンダリングされていない様々なコンポーネントオブジェクトにダウンしています依存関係はレンダリングの準備ができるほど十分です。私は私のコードは、リスナー、this.setLayout(new Ext.layout.CardLayout());を行い囲んパネルでaddedイベントの最初のリスナーを追加することによって、作業を取得するために管理し、その後、コンポーネントのafterrenderリスナーは、最終的に所望のカードに切り替えること.setActiveItem()を呼び出すことを追加されています。

+0

のありがとう!メインのTabPanelをカードレイアウトでラップしようとした後も同じ問題が発生していたので、さらに内部の詳細をさらに切り替えることができました。私のapp.jsで2番目のアップデートを使用することで、問題を解決するのに役立ちました。 – rmoore

+0

うれしかったよ!それは私に多くのこの問題を混乱させていました。 –

答えて

1

カードのレイアウトは外側のフルスクリーンのものではないが、もちろんのカードの場合はうまく機能する。はフルスクリーンのルートパネルでなければならない。この場合

、私は内側のカードレイアウトの周りに「フィット」のレイアウトを使用して、アクティブな項目を設定すると正常に動作しています:

var inner = new Ext.Panel({ 
    layout:'card', 
    items:[ 
     {html:'a'}, 
     {html:'b'} 
    ] 
}); 

var outer = new Ext.Panel({ 
    fullscreen:true, 
    layout:'fit', 
    items:[ 
     inner 
    ] 
}); 

私は問題はパネルがあったか否かについての詳細である疑いがありますレンダリングされたかどうか、およびフルスクリーン:真はちょうど(それは上記の私のコードで動作する理由であり、任意の子供の、)すぐにレンダリングを強制的に発生します。

これはExt.Component元からある:

if (this.fullscreen || this.floating) { 
    this.monitorOrientation = true; 
    this.autoRender = true; 
} 

if (this.fullscreen) { 
    var viewportSize = Ext.Viewport.getSize(); 
    this.width = viewportSize.width; 
    this.height = viewportSize.height; 
    this.cls = (this.cls || '') + ' x-fullscreen'; 
    this.renderTo = document.body; 
} 

私はあなたがこれのいくつかは手動で設定行うことができたとし...しかし私は尋ねる必要があります、あなたは最初にそれの外にフルスクリーン祖先コンポーネントを持つことを避ける方法はありますか?

+0

ああ、私の例はちょっと誤解を招くかもしれません。私に問題を与えたパネルはフルスクリーンの祖先を持っていますが、彼らは直接の親ではなく、いくつかのステップアップです(祖父より)。 –

0

私の質問では2種類の答えがありますが、解決策ははっきりと貨物文化を感じています。私は、それが将来のSencha Touchバージョンで壊れた場合、あまりにも驚くことはありません。

1

私は同じ問題を抱えていました。カードレイアウトは、コンテナパネルに「フィット」のレイアウトがある場合にのみ機能します。しかし、コンテナークラスを適合させることは、スクローラーを正しく動作させないことでした。だから、私がしなければならなかったのは、コンテナとカードパネルのスクロールを無効にし、カードパネルの子のスクロールを設定することです。

0

エラーが発生していないため、Senchaがこれを変更した可能性があります。しかし、setActiveItem()はビューを即座にレンダリングすることになり、UIを設定するときに望ましくありません。あなたはすぐにビューをレンダリングすることなく、最初のカードを設定したい場合は、このように、セッターの代わりに、直接プロパティを使用します。

yourComp.activeItem = yourView; 

代わり

yourComp.setActiveItem(yourView); 
関連する問題