2012-02-08 39 views
0

我正在使用AdvancedDataGrid顯示分層數據。 DataProvider是一個對象,而children字段是一個ArrayCollection對象。當我更新ArrayCollection中的一個對象時,我想要刷新網格。Flex:對象屬性更改沒有更新AdvancedDataGrid

經過研究,我明白這不會自動發生。即使我使用itemUpdated(),然後刷新AC。即使我調用executeBindings(遞歸)。

我知道,聰明的我應該一直使用ObjectProxy,因爲這將解決我所有的問題。我現在的問題是如何在不完全修改我的分層數據對象的情況下解決此問題?

我試圖讓我的Value對象擴展ObjectProxy,但沒有做到這一點。有沒有優雅的解決方案?類型對象甚至可以利用ObjectProxy類?

感謝您的任何有用的提示。

這裏是HierarchicalData代碼:

<mx:HierarchicalData 
    source="{model.myObject}" 
    childrenField="trades"/> 

這裏是 'myObject的' 類:

[Bindable] 
public class MyObject implements ValueObject 
{ 
    public var qty:Number; 
    public var status:String; 
    public var comments:String; 
    public var modified_by:String; 
    public var modified_date:Date; 
    public var trades:ArrayCollection = new ArrayCollection(); 
} 

的 '交易' 的ArrayCollection持有此定義貿易對象的一串:

[Bindable] 
public class Trade implements ValueObject 
{ 
    public var selected:Boolean = false; 
    public var quantity:Number; 
    public var modified_by:String; 
    public var modified_date:Date; 

} 

以下是我在服務器返回數據後如何填充集合:

for (var i:int=0;i<result.length;i++){ 
       var item:Object = result[i]; 

       var recall:MyObject  = new MyObject(); 
       recall.comments    = item.comments; 

       recall.qty     = item.qty; 
       recall.status     = item.status; 
       recall.modified_by   = item.modified_by; 
       recall.modified_date   = item.modified_date; 

       recall.trades.addItem(item.trades); 

       model.recalls.addItem(recall); 
      } 
+0

1.您是否嘗試過設置你的數據源(HierarchicalData)作爲一種可綁定。 2.如果你知道你的數據源何時改變,爲什麼不調用myDG.invalidateList()? – 2012-02-08 23:24:02

+0

我已經更新了上面的代碼以顯示更多細節。你可以看到我的dataSource是可綁定的;鍵入的類是可綁定的。我不確定我在哪裏可能會出錯。是的,我已經在我嘗試調用executeBindings(遞歸)的同一個地方調用invalidateList()。 – fumeng 2012-02-09 15:24:29

+0

首先,你的'HierarchicalData'的'source'實際上只是一個對象('model.myObject'),還是一個錯誤,應該是'model.recalls'?其次,當你使用類型化對象時,你不需要'ObjectProxy'。如果所有東西都是可綁定的,並且使用'ArrayCollection',則ADG應自動更新其列。那麼,你期待什麼樣的刷新不會發生?你能提供一個簡單的,可運行的例子嗎? – 2012-02-09 19:57:44

回答

0

你只需要使用一個可綁定ArrayCollection作爲dataProvider您AdvancedDataGrid。你可以看一個例子here

+0

這就是我正在做的。我已經在上面添加了我的代碼,以便您可以看到。 – fumeng 2012-02-09 15:25:13

0

我在一個星期前就遇到了這個問題。我終於找到了解決方法(這是在我的應用我的initialisationComplete處理程序):

// lets create the model 
model = new ArrayCollection(); 
testPlanHierarchy = new HierarchicalData(); 

// lets create the bindings 
BindingUtils.bindProperty(testPlanHierarchy,"source",this,"model"); 
BindingUtils.bindProperty(testPlanADG,"dataProvider",this,"testPlanHierarchy") 

testPlanADG我當然AdvancedDataGrid和我model是類型對象的ArrayCollection。

[Bindable]標籤的要素是:

  • model
  • 的類型對象類
相關問題