Bearbeiten Sie ArrayCollection über Item Renderer
-
28-10-2019 - |
Frage
Ich verwende einen Funken-List
mit einem benutzerdefinierten Elementrenderer und einen ArrayCollection
für den dataProvider
.
Der ItemRenderer sieht ungefähr so aus wie
<mx:TextInput id="txtValue1" text="{data.myFirstValue}"/>
<mx:TextInput id="txtValue2" text="{data.mySecondValue}"/>
Obwohl ich den Text in txtValue1
oder txtValue2
ändere, werden diese im Objekt in der ArrayCollection nicht geändert.
myFirstValue
und mySecondValue
sind mit dem [Bindable]
-Tag versehen.
Meines Wissens nach sollten die Änderungen automatisch angewendet werden, wenn die Eigenschaft text
so festgelegt ist, dass sie an eine bestimmte Eigenschaft gebunden ist.
Der HACK (oder so denke ich), den ich verwende, besteht darin, das focusOut
-Ereignis jedes Textfelds abzuhören, auf den übergeordneten Datenprovider zuzugreifen und die Werte manuell festzulegen.
Was mache ich falsch?Soll es so funktionieren?
Oder was habe ich falsch verstanden?
Lösung
Standardmäßig erfolgt die Bindung in Flex in eine Richtung.Mit anderen Worten, Änderungen an Ihrem data
-Objekt werden in der Benutzeroberfläche aktualisiert, jedoch nicht umgekehrt.
Sie müssen eine bidirektionale Bindung verwenden.Dies ist seit Flex 4.0 sehr einfach.Beachten Sie die Verwendung des "@" - Zeichens:
<mx:TextInput id="txtValue1" text="@{data.myFirstValue}"/>
<mx:TextInput id="txtValue2" text="@{data.mySecondValue}"/>
Jetzt werden alle am TextInput
vorgenommenen Änderungen auch auf das data
-Objekt übertragen.
Lesen Sie mehr über Zwei-Wege-Datenbindung .