2009-08-18 10 views
1

Ich habe gerade ein TabNavigator in meine Anwendung fallen gelassen:Flex: Alles geht weiß, wenn ich TabNavigator Registerkarten wechseln

<mx:TabNavigator width="100%" height="100%" 
     backgroundColor="#F7F7F7"> 

     <custom:SomeCustomContainer label="Details" /> 

     <mx:Canvas label="Reporting" width="100%" height="100%"> 
     </mx:Canvas> 

    </mx:TabNavigator> 

Und wenn die App zum ersten Mal geladen, scheint alles in Ordnung:

everything working http://img.skitch.com/20090818-dimqrp3ghd89fp9eftipafajk3.jpg

Bis ich auf die Registerkarte "Reporting" klicke. Dann manchmal, die der Rest der Anwendung (das heißt, alles, was außerhalb der TabNavigator) geht weiß:

alt text http://img.skitch.com/20090818-tgud6797qcx18fwxwkik38nrp9.jpg

Alles wieder normal zu gehen scheint, wenn Flash gefragt wird, eine zu tun Redraw (zum Beispiel verliert das Browserfenster wieder den Fokus).

Also, ähm ... Ist das normal? Gibt es eine einfache Möglichkeit, es zu beheben?

bearbeiten: Ich habe eine Variation Joel Vorschlag versucht:

// Where 'this' is the main Application 
ChangeWatcher.watch(this, ["myTabNavigator", "selectedIndex"], function() { 
    invalidateDisplayList() 
}); 

Und es meist Werke ... Bis auf einen kleinen Teil des ApplicationControlBar, der weiß bleibt:

control bar is still white http://img.skitch.com/20090903-fbif9r67jg9wx1rkiwad7sbey6.png

+0

Ich habe versucht, meine benutzerdefinierte Komponente in eigene setzen, aber das scheint nicht zu helfen. –

+0

Es scheint, dass dies ein Firefox-spezifischer Fehler ist, da ich ihn in Safari nicht reproduzieren kann. –

+0

Welche Abmessungen hat der benutzerdefinierte Container? Ist es nahe oder größer als das ~ 4092px Limit in jeder Dimension? Ist dies für Flash Player 9 oder 10 kompiliert? –

Antwort

1

Die Einstellung der Eigenschaft historyManagementEnabled des TabNavigator auf false funktioniert für mich.

+0

D'oh! Na sicher. Warum habe ich nicht daran gedacht, das zu versuchen? Wie auch immer, es hat perfekt funktioniert - danke. –

1

Ich hatte dieses Problem mit Firefox auf dem Mac. Ich verwende PureMVC, also war meine Lösung nicht zu schmerzhaft, aber ich versende manuell eine Event.RESIZE aus meiner Root-Anwendung, wenn ich Tabs wechsle. Dies zwingt die DisplayList zum Aktualisieren und löste das Problem.

+0

Hm, naja, das funktioniert meistens ... Außer, seltsamerweise, ein kleiner Bereich in meiner ApplicationControlBar. Siehe die aktualisierte Beschreibung. –

+0

Statt 'invalidateDisplayList()' habe ich versucht, 'dispatchEvent (new Event (Event.RESIZE))' 'zu nennen, aber das schien keinen Effekt zu haben ... Deshalb habe ich 'invalidateDisplayList()' ausprobiert. –

+0

dispatchEvent (neues Ereignis (Event.RESIZE, true)) - um es zu blasen? Ich fasse ein paar Strohhalme hier. Application.application.dispatchEvent (neues Ereignis (Event.RESIZE))? Dies ist ein beschissener Fehler. Ich würde es gerne in ihre Fehlerdatenbank einfügen, aber ich kann es nicht identifizieren, um das zu tun:/ –

Verwandte Themen