Flex: изменения свойств объекта не обновляются AdvancedDataGrid - PullRequest
0 голосов
/ 08 февраля 2012

Я использую AdvancedDataGrid для отображения иерархических данных.DataProvider - это объект, а дочернее поле - ArrayCollection объектов.Когда я обновляю один из объектов в ArrayCollection, я бы хотел, чтобы сетка обновилась.

После исследования я понимаю, что это не произойдет автоматически.Даже если я использую 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 'trades' содержит набор определенных здесь торговых объектов:

[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 );
            }

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

У меня была эта проблема всего неделю назад. Я наконец нашел решение (это в моем обработчике 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
  • классы типизированных объектов
0 голосов
/ 09 февраля 2012

Вам просто нужно использовать привязываемый ArrayCollection как dataProvider для вашей AdvancedDataGrid.Вы можете посмотреть пример здесь

...