关于ArrayCollction中单个项目的更新

通常,我认为只要绑定了一个ArrayCollection,它内部的值更新时,被绑定组件中的数据都会自动更新。但是下面的测试说明并非如此。

如果更新了ArrayCollection中某个项目的值(并不是通过AddItem等方法更新这个项目,而是直接更新这个项目中的某个值),那么虽然ArrayCollection中的值更新了,但是被绑定的组件并不会接收到更新通知。这时,就要用itemUpdated方法来发送更新事件。

看下面的例子:

请使用下面的链接升级 Flash Player 到最新版本:

安装最新的Flash Player插件

当输入新的site值并单击“改变rong的site”按钮时,虽然已经改变了 _list 的值,但是dg并没有收到通知,只有使用 _list.itemUpdated 方法发出更新事件,才会更新dg中的显示。

代码:

 1<?xml version="1.0" encoding="utf-8"?>
 2<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="12" width="500" height="160">
 3    <mx:ArrayCollection id="_list">
 4        <mx:source>
 5            <mx:Object index="1" name='zrong' site='cai.mediasky.cn'/>
 6            <mx:Object index="2" name='orphen' site='www.98pc.net'/>
 7        </mx:source>
 8    </mx:ArrayCollection>
 9    <mx:DataGrid id="dg" dataProvider="{_list}" width="440" height="100"/>
10    <mx:HBox>
11        <mx:Label text="输入新Site:" color="#ffff00" fontWeight="bold"/>
12        <mx:TextInput id="ti" width="100"/>
13        <mx:Button label="改变zrong的site" click="_list[0].site=ti.text"/>
14        <mx:Button label="itemUpdate" click="_list.itemUpdated(_list[0])"/>
15    </mx:HBox>  
16</mx:Application>
1 文件