Frage

Ich bin in einer TileList mit itemRenderers in ein ungeradees Problem ausgeführt wird.

Hier ist ein funktionierendes Beispiel ohne itemRenderer: 152.org/flex /

Hier ist die gebrochene Version mit itemRenderer: 152.org/brokenExample/
(ich habe nicht die rep dieser beide einen Link zu machen)

Beide Beispiele haben "View Source" aktiviert ist.

Um das Problem zu sehen, das zerbrochene Beispiel verwenden, ein Album auswählen und eine Zeile nach unten scrollen. Nach oben zurück und die Bilder werden umgeschaltet werden. Wenn Sie dies auf dem Arbeitsbeispiel versuchen, es ist in Ordnung.

Dies scheint ein weithin bekannter Fehler zu sein, aber ich kann nicht eine Lösung dafür finden.

UPDATE
Ich begann wieder mit diesem Beispiel zu spielen und fand heraus, etwas anderes. Stellt sich heraus, Sie nicht über die Daten Setter außer Kraft setzen müssen. Sie können eine neue Methode in den itemRenderer erstellen, die festgelegt wird, wenn die Platte aktualisieren will. Also der Trick ist, nicht auf dem Initiieren oder creationComplete- Methoden zu verlassen.

Dies ist, was ich für die itemRenderer in der Anwendung haben.

<itemRenderers:ImageTile img="{data}"/>

Dies ist der Code, den ich in den itemRenderer habe.

public function set img(value:String) : void {
  trace("setting source: " + value);
  this.source = value;
  this.name = value.toString().split("/").pop().split(".").shift();
}

Ich aktualisiere mein Beispiel diese Änderung Reflex.

War es hilfreich?

Lösung

Ich habe nicht Ihre App praktisch, so kann ich nicht testen, End-to-End, aber ich habe an Ihrer Quelle aussehen. Sie müssen wahrscheinlich die Daten Setter in Ihrem itemRenderer außer Kraft zu setzen:

<?xml version="1.0" encoding="utf-8"?>
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()">

 <mx:Script>
  <![CDATA[

   override public function set data(value:Object):void
   {
    super.data = value;
    this.source = data;
    this.name = data.toString().split("/").pop().split(".").shift();
   }

   private function init() : void {
    // Removed from your source and transplanted above
   }

  ]]>
 </mx:Script>

</mx:Image>

Flex wird versuchen, wieder zu verwenden Elementrenderern in Listen (die die Lebenszyklusereignisse bedeutet, dass Sie vielleicht erwarten - initialisieren, creation usw. - nicht immer Feuer), so dass, wenn Sie sicher sein möchten, dass Ihre Renderer aktualisiert wird, wenn das Datenelement Änderungen (wie es wird, wenn Scroll-Ereignisse geschehen), die beste Praxis ist die Renderer Daten Eigenschaft außer Kraft zu setzen. Das wird wahrscheinlich das Problem beheben.

Andere Tipps

Vielleicht versuchen auf creationComplete- ungültig zu machen?

Von dem, was ich mich erinnere mit Datagrids (was eine TileList etwas ähnlich funktionieren), wenn ein Element in dem Fokus kommt seine neu erstellt.

<mx:itemRenderer>
  <mx:Image id="myImage" creationComplete="myImage.invalidate()" />
</mx:itemRenderer>

Haben Sie nicht diesen Code versucht, aber ich denke, das ist, wo Sie suchen beginnen soll. Ich habe einen Blick auf Ihre itemRenderer Komponente. Versuchen Sie creationComplete- statt initialize Ihre Funktion aufzurufen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top