【问题标题】:Flex/AS3 multiple state itemrenderers questionFlex/AS3 多状态 itemrenderers 问题
【发布时间】:2009-10-15 19:18:20
【问题描述】:
我创建了一个具有 3 种状态的模块作为 itemrenderer。这些状态被称为电影、歌曲和电视节目。基本状态为空。 itemRenderer 由 Hbox、Vbox 和标签组成。
我已经创建了一个 List 组件。
我想要做的是在我的 List 组件中填充数据并使用我的 ItemRenderer 使其可见。根据从数据库中提取的数据,我想显示 itemRenderer 的正确状态。因此,如果从数据库中提取的记录是歌曲,我想显示歌曲状态,如果是电影,我想显示电影状态等等。
因此,根据提取的数据,我想更改 itemrenderer 的当前状态。我该怎么做?
谁能告诉我一个例子,我将如何制作这段代码?
谢谢
【问题讨论】:
标签:
apache-flex
actionscript-3
itemrenderer
【解决方案1】:
覆盖您的 CustomItemRenderer 的 set data 方法并根据数据分配适当的状态。
override public function set data(value:Object):void
{
super.data = value;
if(data.type == "song")
this.currentState = SONG_STATE;
else if(data.type == "movie")
this.currentState = MOVIE_STATE;
else if //and so on...
}
【解决方案2】:
感谢它运作良好。
我唯一注意到的是:
this.currentState = MOVIE_STATE;
应该是
this.currentState = "MOVIE_STATE";
谢谢
DJ
【解决方案3】:
使用上述选项,您需要通过循环遍历数据数组集合并将类型设置为另一个州名称来调整所有数据。
也许更好的解决方案是循环遍历列表的所有项目并更改状态;
private function changeItemrendererState():void
{
var item:mycustomitemrenderer;
for(var i:uint = 0; i < itemlist.numElements; i++)
{
item = itemlist.getElementAt(i) as mycustomitemrenderer;
item.currentState = "mynewstate";
}
}
<s:Scroller focusEnabled="false" hasFocusableChildren="true">
<s:DataGroup dataProvider="{mydata}" itemRenderer="skins.mycustomitemrenderer" width="100%" height="100%" id="itemlist">
<s:layout>
<s:TileLayout horizontalGap="2" verticalGap="2" columnAlign="justifyUsingWidth"/>
</s:layout>
</s:DataGroup>
</s:Scroller>
如果你使用 useVirtualLayout="true" 这将不起作用,它只会影响可见项目。