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

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

看下面的例子:

您的浏览器不支持JavaScript,或者您禁用了JavaScript。

请启用浏览器的JavaScript支持。

如果您确认启用了JavaScript,请使用下面的链接升级Flash Player到最新版本:

安装最新的Flash Player插件

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

代码:

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

留言

2008-08-30
次访问