2012-05-09 31 views
0

我是Flex的新手,我錯過了構建Flex應用程序的非常基本的東西 - 我實現了自定義組件MyReportGrid和擴展GridColumnMyColumn。我試圖概述下面的應用程序代碼。Flex:將變量傳遞給自定義組件時,應用程序會感到困惑

有趣的注意到的是,類OfficeItems用於通過MyItems類和MyColumn(其延伸GridColumn)包括customPath變量是用於訪問變量penpencil,並stapler內部OfficeItems類。

我想這也是爲什麼手動排序(通過點擊DataGrid中的列)的原因只能對應於zipCodestateCode和NOT penpencilstapler列。

此外,當我試圖用一個簡單的labelFunction爲zipCodestateCode它總是工作正常,但實施的labelFunction爲penpencil,或stapler永遠不會奏效。通過「永遠不會工作」,我的意思是labelFunction被正確調用,並且它執行它所需的任務,因爲labelFunction接收正確的對象並實際返回正確的格式化的字符串,但是這個返回值永遠不會顯示在數據網格中假設customPath變量將labelFunction混淆爲返回的String映射到哪個變量)。

我認爲這些都是相同的問題,因爲MyColumncustomPath方面混淆了應用程序。任何想法如何解決排序和/或標籤功能?預先感謝您耐心閱讀此(長)張貼。

的類別是:

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忽略至於zipCodestateCode)。 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"... /> 
+0

您是否從「GridColumn」擴展了某個特定原因?除非您想更改或添加其功能,否則不應該這樣做。我從來沒有需要這樣做。這個'customPath'的目標是什麼? – RIAstar

+0

擴展用於使'GridColumn'動態。 'customPath'的目標與應用程序使用的模型是如何協同工作的。例如,類OfficeItems映射到中間層模型,而MyItems是客戶端模型。 – ggkmath

+0

您應該使用代理模型類,而不是使用自定義視圖類來將模型綁定在一起。 – RIAstar

回答

0

這只是一種猜測,但它可以像增加一樣在OfficeItems類中使用「toString」函數? (我會使用評論,但仍在努力獲得聲望。)

相關問題