![](/img/trans.png)
[英]Flex - How to bind XML children attribute values to dataProvider property of a DropDownList?
[英]Flex: How can I pass a GridItemRenderer the DropDownList's dataProvider?
我需要在Flex应用程序的DataGrid列中显示DropDownLists。 这是我在做什么:
首先,我有一个项目渲染器函数,该函数创建一个自定义项目渲染器,并向其传递一个IList属性,该属性将用作dropDownList的dataProvider:
private function rendererFunction(item:Object):ClassFactory {
var itemRenderer:ClassFactory = new ClassFactory(AudActionDropDownIR);
itemRenderer.properties = {AudActionData: AudActionData};
return itemRenderer;
}
这是自定义项目渲染器类的代码:
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.collections.IList;
[Bindable]
public var TheData:ArrayCollection = new ArrayCollection();
public var AudActionData:IList;
public function init():void
{
TheData = new ArrayCollection(AudActionData.toArray());
TheData.filterFunction = filterTheData;
TheData.refresh();
}
private function filterTheData(item:Object):Boolean {
return item.AUD_STEP_TYPE_ID == data.AUD_STEP_TYPE_ID;
}
]]>
</fx:Script>
<s:DropDownList id="theList"
labelField="AUD_ACTION_DESCR"
requireSelection="true"
selectedIndex="0"
dataProvider="{TheData}"
width="100%"/>
传递给渲染器的IList(AudActionData)将转换为已过滤的ArrayCollection,它将用作下拉列表的dataProvider。
我对此有几个问题。
首先,创建渲染器后如何调用init函数? 其次,当我设置列的itemRendererFunction =“ rendererFunction”时,该应用将无法启动,出现白屏。 但是,当我设置itemRenderer =“ components.AudActionDropDownIR”时,该应用程序将启动,但是下拉列表中当然没有数据。
有任何想法吗? 谢谢!
首先,您可以通过创建一个init方法并在渲染器的creationComplete中调用它来完成此操作。 但是除非您从未计划使用虚拟化,否则我不会建议您。 我之所以这么说是因为,当数据随着用户滚动而变化时,您将看不到任何更新,这将使它看起来像是随机的旧数据显示在DataGrid的行上。
相反,请执行以下操作:
private var _data:*;
private var _dataChanged:Boolean;
override public function get data():*{
return _data;
}
override public function set data(value:*):void {
if (value != _data) {
_data = value;
super.data=value;
_dataChanged=true;
invalidateProperties();
}
}
override protected function commitProperties():void {
super.commitProperties();
if (_dataChanged) {
//this is just example code of how you'd update your own subcomponents
someLabel.text = _data['property'];
//more updating
}
}
您可能已经注意到Adobe示例显示了对此使用数据绑定的偏好,原因是,如果您没有强大的性能来编写上面显示的代码类型,那么它会容易得多。 请注意,对于某些更新,您可能还需要覆盖updateDisplayList和/或度量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.