繁体   English   中英

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

[英]Flex 4.6 Mobile - ItemRenderers and application data

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

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

现在假设我们要在ItemRender中向项目添加一些数据。 例如,它可以在商品上调用一个方法,告诉它加载有关自身的一些详细信息,或者我们可以允许用户修改商品上的某些内容。

显然,如果对副本进行操作,我们将无法执行任何操作,因为一旦ItemRenderer被销毁且原始对象对所发生的事情一无所知,它将立即被丢弃。

那么最佳实践是什么? 我应该只使用渲染器的itemIndex这样从我的全局数组中拉出原始项目吗?

{globalArrayCollection} .getItemAt(this.itemIndex)

但是对我来说似乎有点笨拙。 是否有解决此问题的最佳做法?

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

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

在渲染器中:

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");

嗯,为什么您更改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";
}

还是我误会了什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM