2011-06-16 82 views
0

我使用自定义项目渲染器的火花ListdataProviderArrayCollection通过项目渲染器编辑ArrayCollection

的itemRenderer看起来像

<mx:TextInput id="txtValue1" text="{data.myFirstValue}"/> 
<mx:TextInput id="txtValue2" text="{data.mySecondValue}"/> 

然而,即使我改变文本的txtValue1txtValue2,这些实际上并没有在里面的ArrayCollection对象改变。

myFirstValuemySecondValue装饰有[Bindable]标签。

我的理解是,如果text属性设置为绑定某个属性,应该自动应用更改。

所以HACK(或因此我认为),我用的是听focusOut事件的每个文本框,并访问父数据提供者和手动设置的值。

我在做什么错?它应该像这样工作吗?

或者我明白了什么错误?

回答

2

默认情况下,flex中的绑定是单向的。换句话说,您的data对象中的更改会在UI中更新,但不会以其他方式更新。

您需要使用双向绑定。从Flex 4.0开始,这非常简单。注意使用“@”符号的:

<mx:TextInput id="txtValue1" text="@{data.myFirstValue}"/> 
<mx:TextInput id="txtValue2" text="@{data.mySecondValue}"/> 

现在,到TextInput所做的任何更改将获得下推到data对象也是如此。

查看更多about Two way data binding

+0

该死! :噢,这实际上是诀窍!哦,为什么我以前不知道这件事! :S太感谢了! – 2011-06-16 10:11:03

+0

@Brian:我更新了你的答案以提供更多信息。希望你不要介意:) – 2011-06-16 10:21:14

+0

@Ranhiru:我删除了“使用双向绑定时要小心,因为最初为空的TextInput等可以清除数据模型中的数据。”因为我不确定我是否理解它......我始终使用双向绑定,但从未遇到过这样的问题。在什么情况下会发生? – 2011-06-16 11:02:04