我是Flex的新手,我錯過了構建Flex應用程序的非常基本的東西 - 我實現了自定義組件MyReportGrid
和擴展GridColumn
和MyColumn
。我試圖概述下面的應用程序代碼。Flex:將變量傳遞給自定義組件時,應用程序會感到困惑
有趣的注意到的是,類OfficeItems
用於通過MyItems
類和MyColumn
(其延伸GridColumn
)包括customPath
變量是用於訪問變量pen
,pencil
,並stapler
內部OfficeItems
類。
我想這也是爲什麼手動排序(通過點擊DataGrid中的列)的原因只能對應於zipCode
和stateCode
和NOT pen
,pencil
和stapler
列。
此外,當我試圖用一個簡單的labelFunction爲zipCode
或stateCode
它總是工作正常,但實施的labelFunction爲pen
,pencil
,或stapler
永遠不會奏效。通過「永遠不會工作」,我的意思是labelFunction被正確調用,並且它執行它所需的任務,因爲labelFunction接收正確的對象並實際返回正確的格式化的字符串,但是這個返回值永遠不會顯示在數據網格中假設customPath
變量將labelFunction混淆爲返回的String映射到哪個變量)。
我認爲這些都是相同的問題,因爲MyColumn
的customPath
方面混淆了應用程序。任何想法如何解決排序和/或標籤功能?預先感謝您耐心閱讀此(長)張貼。
的類別是:
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"... />
...
其中_myData
有一類MyItems
(注: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"... />
您是否從「GridColumn」擴展了某個特定原因?除非您想更改或添加其功能,否則不應該這樣做。我從來沒有需要這樣做。這個'customPath'的目標是什麼? – RIAstar
擴展用於使'GridColumn'動態。 'customPath'的目標與應用程序使用的模型是如何協同工作的。例如,類OfficeItems映射到中間層模型,而MyItems是客戶端模型。 – ggkmath
您應該使用代理模型類,而不是使用自定義視圖類來將模型綁定在一起。 – RIAstar