Flex 4.6 Mobile - ItemRenderer和应用程序数据

时间:2012-03-20 00:48:11

标签: actionscript-3 flex flex4.5 flexbuilder

关于ItemRenderers的问题:假设我有一个ArrayCollection,它是我的应用程序数据,位于全局对象中。我用这些数据填充一个sparks列表,将ArrayCollection设置为dataProvider。

因此每个ItemRenderer都会获得一个位于数组中的项目的副本。您可以覆盖“设置数据”方法以将数据设置为更具体的域。问题是数据是原始项目的副本。

现在假设我们想在ItemRender内部向项目添加一些数据。例如,它可以调用项目上的方法,告诉它加载一些关于自身的细节,或者我们允许用户修改项目上的某些内容。

显然,如果我们在副本上操作,我们就无法做到这一点,因为一旦ItemRenderer被销毁并且原始对象不知道发生了什么,它就会被丢弃。

那么最佳做法是什么?我应该只使用渲染器的itemIndex从我的全局数组中取出原始项目,如下所示:

{globalArrayCollection} .getItemAt(this.itemIndex)

但对我来说似乎有点笨拙。处理这个问题有最好的做法吗?

2 个答案:

答案 0 :(得分:0)

不确定我是否关注但听起来您正在寻找一种方法来获取项目渲染器以设置/更改值。

您可以直接在渲染器上访问方法。

在渲染器中:

public function setSomeValue(aValue:String):void{
     someString = aValue;

}

您也可以在ArrayCollection上设置数据。

要访问此方法,您可以使用:

var dataGroup:DataGroup = list.dataGroup;
var itemRenderer:YourItemRenderer = dataGroup.getElementAt(list.selectedIndex) as YourItemRenderer;

itemRenderer.setSomeValue("string");

答案 1 :(得分:0)

嗯,为什么你认为如果更改itemRenderer中的值,原始的ArrayCollection不会改变?对我来说,这是有效的,并且初始的ArrayCollection发生了变化。

[Bindable]
protected var model:Model;

override public function set data(value:Object):void
{
    super.data = value; 
    this.model = value as Model;
}

protected function changeValue():void
{
    model.value = "newValue";
}

或者我误解了什么?