#apache-flex #datagrid #flex4 #nested-datalist
#apache-flex #datagrid #flex4 #вложенный-datalist
Вопрос:
У меня есть datagrid и dataprovider для этой сетки является результатом вызова 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
и так далее… таким образом, количество объектов Apple будет меняться с момента его динамического. Как мне отобразить эти данные в datagrid?
Я видел много статей о создании классов «Nested DataGridColumn»… вот так :
http://active.tutsplus.com/tutorials/flex/working-with-the-flex-datagrid-and-nested-data-structures/
Это помогает, но проблема с моими данными заключается в том, что некоторые индексы (например, apple1, apple2 и т.д.) Являются динамическими. Как мне их включить?
Комментарии:
1. Что вы можете сделать, так это динамически генерировать DataGridColumn в ActionScript, а не определять их в MXML milanl.blogspot.com/2009/06 /…
Ответ №1:
У меня это получилось.
Я использовал встроенное средство визуализации элементов и использовал цикл 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>
Ответ №2:
Какую технологию на стороне сервера вы используете? 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
Комментарии:
1. Я использую amfPHP .. Я действительно пробовал это… я удалил все объекты и заключил все яблоки в массив .. но без результата. Кроме того, мое приложение flex является настольным приложением (в случае, если это имеет значение). Просто чтобы посмотреть, что происходит, я удалил все вложенные массивы и использовал простой одномерный массив. Кажется, это также не отображается. Я не знаю, что я делаю не так. метки полей данных и т.д. Все правильно. Я даже отладил и получаю результат на стороне flex. что происходит?