我正在使用一个数组来填充一个 DataProvider,我正在使用它来填充一个列表组件。像这样:
var myDataProvider = new DataProvider(this.myArray);
this['list'].dataProvider = myDataProvider;
当对数组进行更改时,我想告诉 DataProvider 进行更新,以便这些更改将反射(reflect)在列表组件中。如果有一种方法可以告诉 DataProvider 监听数组中的更改并更新自身,那就太好了,但我会选择一种手动更新它的方法。
我可以用新的 DataProvider 替换 DataProvider,但是列表会丢失它的选择。我想我可以通过 DataProvider 并比较和修改每个条目以使其与数组匹配,但这似乎太麻烦了。有没有办法告诉 DataProvider 更新以匹配数组?
编辑:我正在寻找一种在 Flash 而不是 Flex 中执行此操作的方法。
最佳答案
数组在 AS 3 中不可绑定(bind);他们自己不会调度/触发数据绑定(bind)事件。
如果您正在使用 Flex,您可以将数组包装在 ArrayCollection
中。这是可绑定(bind)的,并操纵ArrayCollection
而不是 Array
,一切都应该按照您的希望自动运行。
所以,在实践中:
var myAC:ArrayCollection = new ArrayCollection(myArray);
var myDP = new DataProvider(myAC);
myAC[0] = 'changing the array!'; // will be reflected in the dataProvider
更好的是,如果你通过了
DataProvider
实例到 Flex 组件,您通常(几乎总是)只需传递 ArrayCollection
反而。但是,你没有展示足够的背景让我确定这一点。这里有一些有用的链接:
编辑:我的错,我确实假设您在上面使用了 Flex。
在普通的旧 AS3 中,主体是相同的。
Array
不分派(dispatch)事件,但 DataProvider
做。如果您可以对 dataProvider 本身进行更改,那么您就可以开始了。AS3
DataProvider
类提供了一系列数据操作方法,例如 addItem
, removeItem
, replaceItem
, replaceItemAt
,例如。因此,它基本上归结为您需要对源数组进行什么样的更改。通常情况下,您可以通过
DataProvider
进行操作。 .
关于flash - 如何告诉 DataProvider 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280921/