2009-11-08 2 views
0

У меня есть httpservice, который возвращает данные xml.Flex Данные настройкиProvider для itemRenderer

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

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

<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 визуализатора. Вместо этого я получаю «undefined» для каждого поля ... Как мне пойти об отправке {httpService.lastResult.item} в средство визуализации страницы?

EDIT: Изменения ..

Это обработчик результата 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. Я получаю информацию в datagrid еще, и я получаю данные на каждой странице, но каждая страница имеет одинаковую информацию (первый результат) вместо каждого результата для каждой страницы ...

ответ

0

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

[Bindable] 
var httpDataService:Object; 

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

. }

DataGrid ...

dataprovider = "{httpDataService}" 

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

DataProvider = httpDataService

или в случае

data = httpDataService 

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

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

+0

Спасибо AndrewB! – medoix

0

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

+0

PageListRenderer - это страница визуализации mxml. Текущий код отображает рендер в панели(); и работает, если я указываю поставщикам данных {Application.application.HomePage.myDG.seletecteditme.name}, однако это работает только при нажатии и элементе в datagrid и выплевывает ошибки при загрузке и попытке добавить эти элементы, когда ничего в datagrid . Поэтому почему я пытаюсь поместить в него данные httpservice ... или я пропущу что-то все вместе, спасибо за быстрый ответ. – medoix

+0

Я добавил кое-что, что я пробовал выше ... все еще не работает tho .. – medoix

Смежные вопросы