Modifica ArrayCollection tramite Item Renderer
-
28-10-2019 - |
Domanda
Utilizzo uno spark List
con un renderer di elementi personalizzato e un ArrayCollection
per dataProvider
.
ItemRenderer ha un aspetto simile a
<mx:TextInput id="txtValue1" text="{data.myFirstValue}"/>
<mx:TextInput id="txtValue2" text="{data.mySecondValue}"/>
Tuttavia, anche se cambio il testo in txtValue1
o txtValue2
, questi non vengono effettivamente modificati nell'oggetto all'interno di ArrayCollection.
myFirstValue
e mySecondValue
sono decorati con il tag [Bindable]
.
Da quanto mi risulta, se la proprietà text
è impostata per essere associata a una determinata proprietà, le modifiche dovrebbero essere applicate automaticamente.
Quindi l ' HACK (o almeno così credo) che uso è ascoltare l'evento focusOut
di ciascuna casella di testo, accedere al fornitore di dati genitore e impostare i valori manualmente.
Cosa sto facendo di sbagliato?Dovrebbe funzionare così?
O cosa ho capito male?
Soluzione
Per impostazione predefinita, il binding in flex è unidirezionale.In altre parole, le modifiche nell'oggetto data
vengono aggiornate nell'interfaccia utente ma non viceversa.
È necessario utilizzare la rilegatura a 2 vie.Questo è molto semplice da Flex 4.0.Notare l'uso del segno "@":
<mx:TextInput id="txtValue1" text="@{data.myFirstValue}"/>
<mx:TextInput id="txtValue2" text="@{data.mySecondValue}"/>
Ora, qualsiasi modifica apportata al TextInput
verrà trasferita anche all'oggetto data
.
Ulteriori informazioni sull ' Associazione dati bidirezionale .