Main.mxl
<s:DataGrid dataProvider="{employeeData}"> // employeeData is an Arraycollection with predefined data
<s:typicalItem>
<s:DataItem firstName="Christopher"
lastName="Winchester"
hireDate="22/12/2013"/>
</s:typicalItem>
<s:columns>
<s:ArrayList>
<s:GridColumn labelFunction="employeeName"
headerText="Name"/>
<s:GridColumn dataField="hireDate"
headerText="Hire Date"
labelFunction="dateFormat"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.rpc.events.ResultEvent;
[Bindable]
private var employeeData: ArrayCollection;
private function employeeName(item: Object, column: GridColumn): String
{
return item.firstName+" "+item.lastName;
}
]]>
</fx:Script>
A)任何人都可以向我解释一下Datagrid如何在内部使用 employeeName 功能?我的意思是,我甚至没有为labelFunction传递2个参数,但仍然如何调用它?
B)我为什么要在 s:columns 标记内使用 s:ArrayList标记?
答案 0 :(得分:0)
回答第一个问题:“labelFunction”属性是对DataGrid调用的函数的引用,用于格式化列中单元格的文本。该函数将动态调用,DataGrid将传递所需的参数。 DataGrid期望标签函数始终具有此签名。如果您没有这样做,您将收到运行时错误。
从技术上讲,可以使用以下语法动态调用函数:
var anObject:MyType;
var methodName:String = "myMethod";
anObject[methodName](param1, param2);
或者如果你有一个Function对象
var myFunction:Function;
myFunction(param1, param2);
答案 1 :(得分:0)
A)任何人都可以向我解释一下Datagrid的内部工作原理 有employeeName功能吗?我的意思是,我甚至没有传递2个参数 对于labelFunction,但仍然如何调用它?
labelFunction是GridColumn类的属性。在Gridcolumn中有一个itemToString()函数,用于确定该特定列实例的标签应该是什么。正好在框架代码之外:
/**
* @private
* Common logic for itemToLabel(), itemToDataTip(). Logically this code is
* similar to (not the same as) LabelUtil.itemToLabel().
*/
private function itemToString(item:Object, labelPath:Array, labelFunction:Function, formatter:IFormatter):String
{
if (!item)
return ERROR_TEXT;
if (labelFunction != null)
return labelFunction(item, this);
var itemString:String = null;
try
{
var itemData:Object = item;
for each (var pathElement:String in labelPath)
itemData = itemData[pathElement];
if ((itemData != null) && (labelPath.length > 0))
itemString = (formatter) ? formatter.format(itemData) : itemData.toString();
}
catch(ignored:Error)
{
}
return (itemString != null) ? itemString : ERROR_TEXT;
}
B)为什么我应该在s:columns tag?
中使用s:ArrayList标签
因为DataGrid上的columns属性的数据类型是IList;并且ArrayList实现IList接口。您正在研究的是MXML创建和定义ArrayList的方法。如果要在ActionScript中创建列,则使用稍微不同的方法。