0

我是 Flex 的新手,我缺少一些关于构建 Flex 应用程序的基本知识——我已经实现了一个自定义组件MyReportGridGridColumn使用MyColumn. 我试图概述下面的应用程序代码。

需要注意的有趣的事情是 classOfficeItems由 class 使用MyItems,并且MyColumn(which extends GridColumn) 包含一个customPath用于访问变量pen,pencilstapler内部的变量 class OfficeItems

我相信这就是为什么手动排序(通过单击数据网格中的列)仅适用于对应于zipCodeandstateCode和 NOT penpencil和的列的原因stapler

此外,当我尝试使用简单的 labelFunction for zipCodeorstateCode时,它总是可以正常工作,但实现 labelFunction for penpencilstapler永远不会奏效。“从不工作”我的意思是 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,例如 forzipCodestateCode)。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"... />
4

1 回答 1

0

这只是一个猜测,但它可能类似于向 OfficeItems 类添加“toString”函数吗?(我会使用评论,但仍在努力获得声誉。)

于 2012-05-09T16:51:47.850 回答