Apache flex Flex:如何重用项目渲染器?
我有一个数据网格表,dataGrid表中的gridColumn调用“DropDownListItemRenderer”。使用相同的项目渲染器,我希望根据数据字段名称更改下拉列表中的内容。例如,如果数据字段名为color,则下拉列表将包含红色、蓝色、绿色等。如果数据字段名为furits,则下拉列表将包含不同的选项 如果你看我的项目渲染器中的代码。我试图通过创建一个名为dropDownListData的可绑定数组集合来实现上述目的。在覆盖设置数据函数中我获取数据字段名,使用数据字段名在数组集合中添加相应的项 尽管在运行程序时,下拉列表中填充了正确的数据。每次选择下拉列表时,下拉列表中的数据都会重复并增加 我认为我没有使用正确的方法来做这件事。有人能告诉我怎么做吗?有人能帮我吗?请让我知道,如果我的问题不清楚,我会尝试重新措辞 谢谢:) 这是我的MXML文件:Apache flex Flex:如何重用项目渲染器?,apache-flex,datagrid,flex4,itemrenderer,Apache Flex,Datagrid,Flex4,Itemrenderer,我有一个数据网格表,dataGrid表中的gridColumn调用“DropDownListItemRenderer”。使用相同的项目渲染器,我希望根据数据字段名称更改下拉列表中的内容。例如,如果数据字段名为color,则下拉列表将包含红色、蓝色、绿色等。如果数据字段名为furits,则下拉列表将包含不同的选项 如果你看我的项目渲染器中的代码。我试图通过创建一个名为dropDownListData的可绑定数组集合来实现上述目的。在覆盖设置数据函数中我获取数据字段名,使用数据字段名在数组集合中添加
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import FrontEndObjects.ColourItems;
import mx.collections.ArrayCollection;
import spark.events.IndexChangeEvent;
[Bindable]
private var order:ArrayCollection = new ArrayCollection();
private function addOrder():void{
var orderItems:ColourItems = new ColourItems();
order.addItem(orderItems);
}
]]>
</fx:Script>
<s:BorderContainer x="175" y="101" width="606" height="289">
<s:DataGrid id="myDG" x="53" y="27" width="516" height="201" dataProvider="{order}"
editable="true" variableRowHeight="true">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="label1" headerText="Order #" editable="true"/>
<s:GridColumn dataField="quant" headerText="Qty" editable="true"/>
<s:GridColumn dataField="color" headerText="Color" editable="true" rendererIsEditable="true" itemRenderer="myRenderers.DropDownListItemRenderer"/>
<s:GridColumn dataField="furits" headerText="Furits" editable="true" rendererIsEditable="true" itemRenderer="myRenderers.DropDownListItemRenderer"/>
</s:ArrayList>
</s:columns >
</s:DataGrid>
<s:Button x="499" y="236" label="add" click="addOrder()" />
</s:BorderContainer>
在itemRenderer的setData方法中,在执行添加项之前,您应该检查列表中已经存在哪些数据,然后将目标列设置为可编辑:editable=“true”renderiseditable=“true”。当您单击单元格时,网格将调用itemrenderer中的set data(值:Object)方法,在该方法中,您将越来越多地在下拉列表中添加项。您可以轻松将其修复为禁用可编辑单元格:
<s:GridColumn dataField="color" headerText="Color" editable="false" itemRenderer="myRenderers.DropDownListItemRenderer"/>
<s:GridColumn dataField="furits" headerText="Furits" editable="false" itemRenderer="myRenderers.DropDownListItemRenderer"/>
难以理解此代码,请创建“基于一个文件”示例Hi llya!“基于一个文件”是指将所有内容放在一个MXML文件中吗?现在,我再次编辑了我的问题,以显示我的所有代码。你可以复制粘贴代码并在你的电脑上运行。我有一个MXML文件,一个项目渲染器文件和一个colourItems类。希望这更清楚。请让我知道我能做些什么,使我的代码更清楚给你。谢谢:)嗨。。我如何做一个测试,看看它是否已经存在??你能给我举个例子吗?我对felx非常陌生。使用调试模式。这个问题本身实际上产生了更多的问题:-)但是,是的,看看调试模式中的变量
public class ColourItems
{
public var label1:String;
public var quant:String;
public var color:String;
public var furits:String;
}
<s:GridColumn dataField="color" headerText="Color" editable="false" itemRenderer="myRenderers.DropDownListItemRenderer"/>
<s:GridColumn dataField="furits" headerText="Furits" editable="false" itemRenderer="myRenderers.DropDownListItemRenderer"/>