Вложенные объекты для поставщика данных в сетке данных, не отображающие данные

У меня есть сетка данных, и поставщик данных для этой сетки является результатом вызова RPC. Набор результатов имеет следующую структуру:

Array
[0]->Object #1
      [one] => 1
      [two] => 1
      [three] => Object #2
          [apple1] = > Object #3
              [color] =>    red
              [rate] => 20
          [apple2] => Object #4 ( the    number of apples is dynamic, apple3,apple4 .. and so on)
              [color] =>    blue
              [rate] => 100

и так далее ... поэтому количество объектов яблока будет варьироваться в зависимости от его динамики. Как мне отобразить эти данные в сетке данных?

Я видел много статей о создании классов «Nested DataGridColumn» ... например:

http://active.tutsplus.com/tutorials/flex/working-with-the-flex-datagrid-and-nested-data-structures/

Это помогает, но проблема с моими данными в том, что некоторые индексы (например, apple1, apple2 и т. Д.) Являются динамическими. Как их включить?


person Lin    schedule 19.05.2011    source источник
comment
Что вы можете сделать, так это динамически сгенерировать DataGridColumn в ActionScript, а не определять их в MXML milanl.blogspot.com/2009/06/   -  person JabbyPanda    schedule 21.05.2011


Ответы (2)


У меня это работает.

Я использовал встроенное средство визуализации элементов и цикл foreach для перебора объекта, содержащего динамические вложенные объекты внутри. Это мой код:

<mx:DataGridColumn headerText="Roles Assigned">
<mx:itemRenderer>
<fx:Component>
    <mx:VBox creationComplete="box1_creationCompleteHandler()">
    <fx:Script>
    <![CDATA[
        import com.pm.modules.events.UpdateDBEvent;     
        import mx.containers.HBox;
        import mx.controls.Alert;
        import mx.controls.Label;
        import mx.controls.LinkButton;
        import mx.events.FlexEvent;     

        protected function box1_creationCompleteHandler():void
        {
        for each(var temp:Object in data.roles){
            var hgrp:HBox = new HBox();
            hgrp.autoLayout = false;
            var lbl:Label = new Label();
            lbl.text = temp.rname;
            var lb:LinkButton = new LinkButton();
            lb.label = 'X';
            lb.id = temp.rid.toString();
            lb.focusEnabled = true;
            lb.addEventListener(MouseEvent.CLICK,handleClick);

            hgrp.addElement(lbl);
            hgrp.addElement(lb);
            this.addElement(hgrp);
        }
    }

    protected function handleClick(event:MouseEvent):void{
      dispatchEvent(new UpdateDBEvent(UpdateDBEvent.ON_DELETE_PRIVILEGE_ROLE_MAP,0,0,0,event.target.id,0,true));
    }
]]>
</fx:Script>
</mx:VBox>
</fx:Component></mx:itemRenderer></mx:DataGridColumn>
person Lin    schedule 24.05.2011

Какие серверные технологии вы используете? BlazeDs / amfphp, что-то еще?

Что вам нужно сделать, так это обернуть свои яблоки в ArrayCollection, и тогда все будет в порядке.

[0]->RPC Result
 [one] => 1
 [two] => 1
 [three] => ArrayCollection
     [1] = > Apple#3
          [color] => red
          [rate] => 20
     [2] => Apple #4 ( the number of apples is dynamic, apple3,apple4 .. and so on)
          [color] => blue
          [rate] => 100
person Dennis Jaamann    schedule 19.05.2011
comment
Я использую amfPHP ... Я пробовал это ... Я отбросил все объекты и обернул все яблоки в массив ... но безрезультатно. Кроме того, мое гибкое приложение - это настольное приложение (в случае, если это имеет значение). Чтобы увидеть, что происходит, я отбросил все вложенные массивы и использовал простой простой одномерный массив. Кажется, это тоже не отображается. Я не знаю, что я делаю не так. метки полей данных и т. д. все правильно. Я даже отлаживал и получаю результат на гибкой стороне. что происходит ? - person Lin; 19.05.2011