私は Flex を初めて使用し、Flex アプリケーションの設計に関して非常に基本的なことが欠けています。カスタム コンポーネントMyReportGrid
を実装し、.xml で拡張GridColumn
しましMyColumn
た。以下にアプリケーションコードの概要をまとめてみました。
注目すべき興味深い点は、 class が classOfficeItems
によって使用されMyItems
、MyColumn
( を拡張GridColumn
する ) には、customPath
変数pen
、pencil
、およびstapler
内部の classにアクセスするために使用される変数が含まれていることですOfficeItems
。
zipCode
これが、(データグリッドの列をクリックして) 手動で並べ替えることが、 andstateCode
と NOT pen
、pencil
、 に対応する列に対してのみ機能する理由だと思いますstapler
。
zipCode
また、 orに単純な labelFunction を使用しようとすると、常に正常に動作しますが、 、、またはstateCode
に labelFunction を実装すると機能しません。「決して機能しない」とは、labelFunction が正しく呼び出され、labelFunction が正しいオブジェクトを受け取り、実際に正しいフォーマットされた文字列を返すという点で必要なタスクを実行することを意味しますが、この戻り値はデータグリッドに表示されません (私は返された文字列がどの変数にマップされるかについて、変数が labelFunction を混乱させると仮定します)。pen
pencil
stapler
customPath
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
機能は によって無視されます)。は:MyColumn
zipCode
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>
}
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"... />