2012-02-08 3 views
0

私はAdvancedDataGridを使用して階層データを表示しています。 DataProviderはオブジェクトで、childrenフィールドはオブジェクトのArrayCollectionです。 ArrayCollection内のオブジェクトの1つを更新すると、グリッドをリフレッシュする必要があります。Flex:オブジェクトプロパティの変更がAdvancedDataGridを更新しない

調査後、私はこれが自動的に起こらないことを理解しています。 itemUpdated()を使用してACをリフレッシュしても、私はexecuteBindings(再帰的)を呼び出す場合でも。

私は知っている私はすべての私の問題を解決するためにObjectProxyを使用しているはずです。私の問題は、階層データオブジェクトを完全に改造することなくこれを修正する方法です。

バリューオブジェクトを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.あなたがバインド可能としてあなたのdataSource(HierarchicalData)を設定しようとしています。 2.データソースがいつでも変更されていることがわかったら、myDG.invalidateList()を呼び出さないのはなぜですか? –

+0

詳細を表示するために上記のコードを更新しました。私のdataSourceがバインド可能であることがわかります。型付きクラスはバインド可能です。ここでどこが間違っているのか分かりません。そして、私はexecuteBindings(再帰的)を呼び出すのと同じ場所でinvalidateList()を呼び出しました。 – fumeng

+0

まず、 'HierarchicalData'の' source'は本当にオブジェクト( 'model.myObject')か、それとも間違いで' model.recalls'ですか?第2に、型付きオブジェクトを使うときには、 'ObjectProxy'は必要ありません。すべてがバインド可能で、 'ArrayCollection'を使用している場合、ADGはその列を自動的に更新する必要があります。だから、どんなリフレッシュが起こっていないと思いますか?簡単で実行可能な例を提供できますか? –

答えて

0

AdvancedDataGridには、ArrayCollectiondataProviderとしてバインドする必要があります。あなたは例を見ることができますhere

+0

それは私がやっていることです。あなたが見ることができるように上記のコードを追加しました。 – fumeng

0

私はちょうど1週間前にこの問題を抱えていました。

// 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のです:私は最終的に解決策は、(これは私のアプリケーションの私のinitialisationCompleteハンドラである)を発見しました。

[Bindable]タグを持つ要素は次のとおりです。型指定されたクラスをオブジェクト

  • model
関連する問題