我是 Flex 的新手,我缺少一些关于构建 Flex 应用程序的基本知识——我已经实现了一个自定义组件MyReportGrid
并GridColumn
使用MyColumn
. 我试图概述下面的应用程序代码。
需要注意的有趣的事情是 classOfficeItems
由 class 使用MyItems
,并且MyColumn
(which extends GridColumn
) 包含一个customPath
用于访问变量pen
,pencil
和stapler
内部的变量 class OfficeItems
。
我相信这就是为什么手动排序(通过单击数据网格中的列)仅适用于对应于zipCode
andstateCode
和 NOT pen
、pencil
和的列的原因stapler
。
此外,当我尝试使用简单的 labelFunction for zipCode
orstateCode
时,它总是可以正常工作,但实现 labelFunction for pen
、pencil
或stapler
永远不会奏效。“从不工作”我的意思是 labelFunction 被正确调用,它执行它是必需的任务,因为 labelFunction 接收正确的对象并实际上返回正确的格式化字符串,但是这个返回的值永远不会显示在数据网格中(我是假设customPath
变量使 labelFunction 混淆了返回的 String 映射到哪个变量)。
我认为这些都是同一个问题,因为应用程序的customPath
方面MyColumn
混淆了应用程序。知道如何修复排序和/或 labelFunction 吗?提前感谢您耐心阅读此(长)帖子。
这些课程是:
package com.supportClasses
{
public class OfficeItems {
public var pen:*;
public var pencil:*;
public var stapler:*;
}
}
和
package com.models
{
import com.supportClasses.OfficeItems;
[Bindable]
public class MyItems extends Model {
public function myItems() {
super();
}
public var office:OfficeItems;
public var zipCode:int;
public var stateCode:String;
}
}
数据网格如下所示:
...
<components:MyReportGrid id="myGrid" dataProvider="{_myData}"...>
<components:columns>
<fx:Array>
<supportClasses:MyColumn customPath="office" dataField="pen"... />
<supportClasses:MyColumn customPath="office" dataField="pencil"... />
<supportClasses:MyColumn customPath="office" dataField="stapler"... />
<supportClasses:MyColumn dataField="zipCode"... />
<supportClasses:MyColumn dataField="stateCode"... />
...
where_myData
有一个类MyItems
(注意:该customPath
特征在此处不存在时被忽略MyColumn
,例如 forzipCode
和stateCode
)。MyColumn
是:
package com.components.supportClasses {
import spark.components.gridClasses.GridColumn;
public class MyColumn extends GridColumn
{
public var customPath:String="";
...
public function MyColumn(headerText:String="header" customPath:String="", dataField:String="data", ...) {
this.headerText=headerText;
this.customPath=customPath;
this.dataField=dataField;
...
}
}
}
MyReportGrid 是:
package com.models {
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="400" height="300">
import com.components.myClasses.MyColumn;
import com.itemRenderers.myItemRenderer;
import mx.collections.ArrayCollection;
import mx.collections.ArrayList;
import mx.collections.ListCollectionView;
import spark.components.gridClasses.GridColumn;
...
<s:DataGrid width="100%" ... />
</s:Group>
}
标签函数是:
private function redFormat(item:Object, column:MyColumn):String {
var formatResult:String = "red "+item.office.pen;
return formatResult; // returns "red Bic15938" (for example)
}
来自:
<supportClasses:MyColumn customPath="office" dataField="pen" labelFunction="redFormat"... />