Вопрос

У меня есть httpservice, который возвращает данные XML.

<mx:HTTPService id="httpService" url="data/Software.xml" resultFormat="e4x" result="httpResult_handler(event)" fault="Alert.show('XML Data Error')" />

У меня также есть сетка данных, использующая возвращаемые данные и передающая их средству рендеринга, который работает отлично.

<mx:DataGrid id="myDG" 
dataProvider="{httpService.lastResult.item}"
headerHeight="0"
editable="false"
width="100%" height="100%" 
rowHeight="50"
itemClick="switchView(myDG.selectedItem.name);">

<mx:columns>
<mx:DataGridColumn itemRenderer="com.xd.components.renderers.SoftwareListRenderer" />
</mx:columns>

</mx:DataGrid>

Для каждого результата в данных XML у меня есть код, который создает новый panel() и рендерер.

private function viewstack_addChild(name:String):void {
            var p:Panel = new Panel();
            p.id = name;
            p.name = name;
            p.title = name;
            p.percentWidth = 100;
            p.percentHeight = 100;
            var randColor:uint = Math.random() * 0xFFFFFF;
            p.setStyle("backgroundColor", randColor);
            var pR:PageListRenderer = new PageListRenderer();
            var data:Object;
            //Do something to get the data to be displayed;
            pR.data = PageListRenderer;
            p.addChild(pR);
            myViewStack.addChild(p);
        }

Однако я не могу использовать то же самое {data.name} в этом рендерере, как я делаю в рендерере datagrid.Вместо этого я получаю «неопределенное» для каждого поля...Как бы я поступил, пройдя {httpService.lastResult.item} к рендерингу страницы тоже?

РЕДАКТИРОВАТЬ:Изменения внесены..

Это обработчик результатов httpservice.

        private function httpResult_handler(evt:ResultEvent):void {
            if (evt.result.software.item) {

                 data = XML(evt.result).descendants("item");
                    var item:Object = data;
                    for each(item in data) {
                        viewstack_addChild(item.name);
                    }
            }
         }

я тоже пробовала..

        private function httpResult_handler(evt:ResultEvent):void {
            if (evt.result.software.item) {

                 data = httpService.lastResult.item;
                     var item:Object = data;
                     for each(item in data) {
                        viewstack_addChild(item.name);
                    }
            }
         }

Я также изменил pR.data = data в viewstack_addChild функция.Я по-прежнему получаю информацию в сетке данных, и я получаю данные на каждой отображаемой странице, однако каждая страница имеет одинаковую информацию (первый результат) вместо каждого результата для каждой страницы...

Это было полезно?

Решение

Я бы рекомендовал не делать dataProvider данными, возвращаемыми из службы http, а привязывать переменную, которая будет использоваться для хранения этих данных.Тогда любой компонент пользовательского интерфейса, инициализированный или нет, сможет его использовать.

[Bindable]
var httpDataService:Object;

function getData():void 
{
   hpptDataService = httpService.lastResult.item;

. }

сетка данных...

dataprovider = "{httpDataService}"

другие компоненты пользовательского интерфейса

dataProvider = httpDataService

или в твоем случае

 data = httpDataService

помните, что Flex имеет элементы управления как ленивую инициализацию, поэтому, если ваш другой элемент управления не инициализируется в тот момент, когда вы делаете HTTP-запрос, это неудача.Следующее взято из ссылки на стек представлений, но в значительной степени применимо к любому элементу управления, который не виден пользователю, пока не выбран...

Примечание:Политикой создания по умолчанию для всех контейнеров, кроме контейнера приложения, является политика родительского контейнера.Политика по умолчанию для контейнера приложения — auto.Поэтому в большинстве случаев дочерние элементы элемента управления View Stack не создаются до тех пор, пока они не будут выбраны.Вы не можете установить свойство selectedChild для дочернего элемента, который еще не создан.

Другие советы

Я думаю, проблема в том, что вы устанавливаете данные как PageListRenderer, которые подозрительно похожи на класс, а не на нужные вам данные.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top