Данные в компонентах запускаются в ItemRenderer в Flex

#list #apache-flex #slideshow #itemrenderer

#Список #apache-flex #слайд-шоу #itemrenderer

Вопрос:

Мне нужно создать слайд-шоу, используя данные, полученные из другого представления.

Я вызываю просмотр слайд-шоу следующим образом:

 <s:List id = "list" dataProvider = "{actions}"
change = "navigator.pushView (DetailsProduct, list.selectedItem) ">
<s:itemRenderer>
<fx:Component>
<s:MobileIconItemRenderer
labelField = "title"
messageField = "description"
decoratorClass = "{data.icon}">
</s:MobileIconItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:List>
  

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

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

С помощью этого кода объект появляется, но кнопки «Назад» и «Вперед» не работают.

 <s:List id = "myList"
     dataProvider = "{actions}">
</s:List>

<s:Image source="{data.icon}"/>
<s:Label text="{data.title}"/>
<s:Label text="{data.description}"/>

<s:HGroup>
<s:Button label="Forward" click="imgForward(event)"/>
<s:Button label="Back" click="imgBack(event)"/>
</s:hgroup>
  

И этот код ничего не показывает, даже объект вызывается таким же образом.

 <s:List id = "myList"
     dataProvider = "{actions}">
         <s:itemRenderer>
     <fx:Component>
     <s:ItemRenderer>
         <s:Image source="{data.icon}"/>
         <s:Label text="{data.title}"/>
         <s:Label text="{data.description}"/>
     </s:ItemRenderer>
     </fx:Component>
     </s:itemRenderer>
</s:List>

<s:HGroup>
     <s:Button label="Forward" click="imgForward(event)"/>
     <s:Button label="Back" click="imgBack(event)"/>
</s:hgroup>
  

Комментарии:

1. Для дальнейшего использования; кнопка в редакторе с «фигурными скобками» отформатирует код для удобства отображения; поэтому вам не нужно вставлять пробелы в имена тегов.

Ответ №1:

Я действительно не понимаю, чего вы пытаетесь достичь. Свойство data определено в интерфейсе IDataRenderer.

Когда компонент используется в качестве средства визуализации, элемент данных, который представляет экземпляр компонента, передается в средство визуализации с использованием свойства data.

Вы не определили количественно, что означает «работает или «не работает», поэтому я не уверен, каково ваше желаемое поведение, и почему одно неверно, а другое нет. В вашем первом примере я бы не ожидал, что свойство data будет иметь какое-либо значение:

 <s:List id="myList"
    creationComplete="criaLista(event)"
    dataProvider="{actions}">
</s:List>

<s:Image source="{data.icon}"/>
<s:Label text="{data.title}"/>
<s:Label text="{data.description}"/>
  

Я не уверен, что содержит dataProvider, но если он содержит объекты, я бы ожидал, что что-то будет отображаться в списке. Я бы ожидал, что изображение и метки не будут отображать визуальные элементы, потому что свойство data, скорее всего, равно null. Если вы хотите сослаться на элемент, выбранный в списке, вместо доступа к данным, вы могли бы получить доступ к чему-то вроде этого:

 <s:Image source="{myList.selectedItem.icon}"/>
<s:Label text="{myList.selectedItem.title}"/>
<s:Label text="{myList.selectedItem.description}"/>
  

Он использует свойство SelectedItem из экземпляра списка для изменения отображаемых элементов.

В вашем втором примере, где вы создаете ItemRenderer, я бы ожидал, что это сработает:

 <s:List id="myList"
    creationComplete="criaLista(event)"
    dataProvider="{actions}">
        <s:itemRenderer>
    <fx:Component>
    <s:ItemRenderer>
        <s:Image source="{data.icon}"/>
        <s:Label text="{data.title}"/>
        <s:Label text="{data.description}"/>
    </s:ItemRenderer>
    </fx:Component>
    </s:itemRenderer>
</s:List>
  

Однако ItemRenderer ничего не делает для позиционирования изображения или двух меток, поэтому я бы ожидал, что они будут наложены друг на друга, что, вероятно, нежелательное поведение. Вы можете задать значения X и Y для их изменения.

Если вы хотите подробнее рассказать о конкретных проблемах; почему ваш первый образец «работает», а второй нет, пожалуйста, сделайте это.

Комментарии:

1. @www.Flextras.com 1, хорошая обложка. @Leticia существует конфликт в именовании переменной «data», это проблема для понимания, что вы пытаетесь сделать.

2. Спасибо, что ответили мне. Что я пытаюсь сделать, так это: у меня есть список с несколькими элементами. Когда я нажимаю на него, чтобы показать слайд-шоу с подробной информацией об этом элементе, где я могу перейти к подробной информации о следующем элементе, или вернуть детали элемента выше. В первом коде я могу просмотреть эти сведения, но их нет в списке, поэтому я не могу перейти к деталям следующего раздела или вернуться к деталям элемента выше. Во втором коде я пытаюсь отобразить элемент в списке, но ничего не отображается. Я не знаю, как он извлекает ссылки, когда находится вне списка, и не может сделать то же самое, когда он находится внутри.

3. @Leticia Предоставьте нам полный исполняемый пример; чтобы мы могли взять код и попытаться его запустить.

4. @www.Flextras.com Как я могу отправить это для вас? Извините за мое объяснение, я не очень хорошо говорю по-английски.

5. @Leticia Отредактируйте свой первоначальный вопрос и опубликуйте код, а также связанные файлы. В качестве альтернативы (если ваш код компилируется) вы могли бы опубликовать сборку релиза с исходным кодом из Flash Builder и опубликовать ее где-нибудь; затем отредактируйте свой исходный пост, чтобы включить ссылку на этот проект.