【问题标题】:Edit ArrayCollection through Item Renderer通过 Item Renderer 编辑 ArrayCollection
【发布时间】:2011-06-16 10:04:06
【问题描述】:

我使用带有自定义项目渲染器的 spark List 和用于 dataProviderArrayCollection

ItemRenderer 看起来像

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

但是,即使我更改了 txtValue1txtValue2 中的文本,这些实际上并没有在 ArrayCollection 内的对象中更改。

myFirstValuemySecondValue[Bindable] 标签装饰。

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

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

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

或者我理解错了什么?

【问题讨论】:

    标签: apache-flex actionscript-3 data-binding itemrenderer bindable


    【解决方案1】:

    默认情况下,flex 中的绑定是单向的。换句话说,data 对象中的更改会在 UI 中更新,而不是相反。

    您需要使用 2 向绑定。自 Flex 4.0 以来,这非常容易。注意“@”符号的使用:

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

    现在,对 TextInput 所做的任何更改也将被推送到 data 对象。

    阅读更多关于Two way data binding的信息。

    【讨论】:

    • 该死! :O 那确实成功了!哦,我以前怎么不知道呢! :S 非常感谢!
    • @Brian:我更新了您的答案以提供更多信息。希望你不介意:)
    • @Ranhiru:我删除了“谨慎使用双向绑定,因为最初为空的 TextInput 等可能会清除数据模型中的数据”的声明。因为我不确定我是否理解它......我一直使用 2-way binding 但从未遇到过这样的问题。在什么情况下会发生这种情况?
    • @Brian:这是从我添加的同一篇文章中的评论中复制而来的。我还没有遇到过这样的问题。但我理解的方式是,因为它是双向绑定的,当加载一个没有任何文本的文本框时,数据模型也会变成空的。我认为添加这可能是对其他用户的警告。
    • @Ranhiru:我想如果行为是不确定的,我不会考虑使用这种类型的东西。以我的经验,双向绑定总是从数据模型中获取数据,反之亦然。我很想看到相反情况如何发生的例子,但我更愿意将其排除在我的答案之外,因为根据我的经验,这不是问题。
    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多