0

私は Flex を初めて使用し、Flex アプリケーションの設計に関して非常に基本的なことが欠けています。カスタム コンポーネントMyReportGridを実装し、.xml で拡張GridColumnしましMyColumnた。以下にアプリケーションコードの概要をまとめてみました。

注目すべき興味深い点は、 class が classOfficeItemsによって使用されMyItemsMyColumn( を拡張GridColumnする ) には、customPath変数penpencil、およびstapler内部の classにアクセスするために使用される変数が含まれていることですOfficeItems

zipCodeこれが、(データグリッドの列をクリックして) 手動で並べ替えることが、 andstateCodeと NOT penpencil、 に対応する列に対してのみ機能する理由だと思いますstapler

zipCodeまた、 orに単純な labelFunction を使用しようとすると、常に正常に動作しますが、 、、またはstateCodeに labelFunction を実装すると機能しません。「決して機能しない」とは、labelFunction が正しく呼び出され、labelFunction が正しいオブジェクトを受け取り、実際に正しいフォーマットされた文字列を返すという点で必要なタスクを実行することを意味しますが、この戻り値はデータグリッドに表示されません (私は返された文字列がどの変数にマップされるかについて、変数が labelFunction を混乱させると仮定します)。penpencilstaplercustomPath

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(注: forやなど、ここに存在しない場合、customPath機能は によって無視されます)。は:MyColumnzipCodestateCodeMyColumn

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>
}

labelFunction は次のとおりです。

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 に答える