如何告知DataProvider更新?

Rob*_*ert 4 flash actionscript-3 dataprovider

我正在使用一个数组来填充DataProvider,我用它来填充列表组件.像这样:

var myDataProvider = new DataProvider(this.myArray);
this['list'].dataProvider = myDataProvider;
Run Code Online (Sandbox Code Playgroud)

当对数组进行更改时,我想告诉DataProvider更新,以便这些更改将反映在列表组件中.如果有一种方法可以告诉DataProvider监听数组中的更改并自行更新,那将是很好的,但我会想办法手动更新它.

我可以使用新的DataProvider替换DataProvider,但随后列表将丢失其选择.我想我可以浏览DataProvider并比较和修改每个条目以使其与数组匹配,但这似乎太麻烦了.有没有办法告诉DataProvider更新以匹配数组?

编辑:我正在寻找一种在Flash中执行此操作的方法,而不是Flex.

jas*_*son 5

数组在AS 3中不可绑定; 他们不会自己调度/触发数据绑定事件.

如果你正在使用Flex的工作,你可以用你的阵列在ArrayCollection其中可绑定和操纵ArrayCollection,而不是Array,因为你希望一切都应该自动工作.

所以,在实践中:

var myAC:ArrayCollection = new ArrayCollection(myArray);
var myDP = new DataProvider(myAC);

myAC[0] = 'changing the array!'; // will be reflected in the dataProvider
Run Code Online (Sandbox Code Playgroud)

更好的是,如果您将该DataProvider实例传递给Flex组件,通常(几乎总是)只能传递它ArrayCollection.但是,你没有给我足够的背景信息来确定这一点.

这里有一些有用的链接:

编辑:我的错,我确实假设你正在使用Flex进行上述操作.

在普通的旧AS3中,主体是相同的.该Array不会调度事件,但DataProvider确实.如果您可以对dataProvider本身进行更改,那么您就可以开始了.

在AS3 DataProvider类提供了一堆的数据处理方法,如addItem,removeItem,replaceItem,replaceItemAt,只是举例.

因此,它基本上归结为您需要对源数组进行哪些更改.通常情况下,你可以通过DataProvider.