由于我对Flex有些新意,我可能会遗漏一些基本的东西。我有一个Spark List容器,其dataProvider绑定到从RemoteObject调用返回的结果集。很标准的东西。
<s:List id="list" dataProvider="{model.stuff}" width="100%" height="100%"
selectedIndex="@{selectedSlider.value}"
itemRenderer="{stuffRenderer}">
</s:List>
selectedIndex与HSlider相关联,但这不是问题。我的问题是我想从列表中自动选择某个“首选”元素(最初只是为了引导用户)。
我尝试在creationComplete事件中执行此操作,但我的数据尚未显示...设置selectedIndex
无效...现在为时尚早。
这样做的正确方法是什么?
答案 0 :(得分:2)
private function findAllUsers_resultHandler(e:ResultEvent):void
{
list.dataProvider = new ArrayCollection(e.result as Array);
if(firstTry)
{
list.selectedIndex = 0;
firstTry = false;
}
}
答案 1 :(得分:2)
spark.components.List
在其类层次结构中有spark.components.SkinnableDataContainer
,只要dataProvider发生更改,就会调度dataProviderChanged
事件。遗憾的是,[Event]
中没有允许在MXML中使用此事件的SkinnableDataContainer
元数据。因此,您需要创建自己的自定义组件,扩展List
。
package
{
import spark.components.List;
[Event(name="dataProviderChanged", type="flash.events.Event")]
public class MyList extends List
{
public function MyList()
{
super();
}
}
}
通过使用自定义组件,您可以为dataProviderChanged
添加事件监听器并相应地更新selectedIndex
。
<ns1:MyList id="list" dataProvider="{model.stuff}" width="100%" height="100%"
dataProviderChanged="selectedIndex = selectedSlider.value"
selectedIndex="@{selectedSlider.value}"
itemRenderer="{stuffRenderer}">
</ns1:MyList>
BTW:这也适用于其他基于List
的组件(例如DropDownList
)。
答案 2 :(得分:1)
我相信如果您只是将滑块的初始值设置为您想要在开头选择的索引,它应该可以工作。 像这样:
<s:List dataProvider="{yourData}" selectedIndex="{hSlider.value}" /> <s:HSlider id="hSlider" minimum="0" maximum="{yourData.length - 1}" stepSize="1" value="theIndexYouWantAsInitial" liveDragging="true" />
那应该有用。 HTH FTQuest