Sencha Touch 2でタブを変更する間にタブパネルにロードマスクを表示したい場合、正しいアプローチは何ですか?
タブボタンが押されたときにロードマスクを表示し、パネルが正しく表示されたらすぐに非表示にしたい。
Ext.define("MyProject.view.Main", {
extend: 'Ext.tab.Panel',
requires: [
'Ext.TitleBar','Ext.MessageBox'
],
config: {
fullscreen: true,
tabBarPosition: 'bottom',
layout: {
type: 'card',
animation: 'fade' //false, fade, flip, pop, scroll, slide
},
items: [
{
xtype: 'panel1',
masked: {
xtype:'loadmask',
message:'Chargement...'
},
listeners: {
painted: function(container, value, oldValue, eOpts) {
//Ext.Msg.alert('Test', 'painted');
this.setMasked(false);
}
}
},
{
xtype: 'panel2',
masked: {
xtype:'loadmask',
message:'Chargement...'
},
listeners: {
painted: function(container, value, oldValue, eOpts) {
//Ext.Msg.alert('Test', 'painted');
this.setMasked(false);
}
}
},
問題は、イベントがトラップされていることですが、子アイテムの作成時にマスクを表示しているため、マスクが表示されていません。onActiveItemChangedのようなイベントが必要ですが、AFTERではなくBEFOREで発生します。誰もがそれをどのように実装できるかについての考えを持っていますか?
更新:SenchaTouchフォーラムにあるコードを追加してほぼ完成しました。メインビュー(タブパネル)レベルで追加:
listeners: {
delegate : 'tabbar > tab',
tap : function() {
Ext.Viewport.setMasked({ xtype: 'loadmask', message: 'Loading...', indicator:true});
}
}
次に、各アイテムについて、タブパネルに追加します。
xtype: 'panel1',
listeners: {
painted: function(container, value, oldValue, eOpts) {
Ext.Viewport.setMask('false');
}
}
しかし、現在の問題は、デフォルトの「タップ」イベントリスナーをオーバーライドするため、ボタンをクリックしても、常に同じタブに留まり、他のリスナーを表示しないことです。それでも、新しいタブのペイントされたイベントは発生します。