flex 4 list ItemRenderer: как я могу иметь разные itemrenderers для разных строк? - PullRequest
1 голос
/ 28 июня 2010

Я создаю список очков для игры. Теперь большую часть списка мне нужно иметь тот же ItemRenderer. но в одной конкретной строке списка, где указан пользователь, который играет, он должен показывать другую информацию и иметь другой цвет фона. Как я могу достичь этого?

обновление

Я уже пытался решить проблему с состояниями, я создал 2 состояния, одно из которых называется «мое», а второе - «другие».

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

Ответы [ 3 ]

9 голосов
/ 28 июня 2010

Элемент управления «Список искр», поставляемый с Flex 4, позволяет назначать другой itemRenderer в зависимости от некоторой логики.

Вы можете создать пользовательскую функцию визуализации элементов, установив свойство itemRendererFunction .

    <fx:Script>
    <![CDATA[
        import renderers.*;

        import mx.core.ClassFactory;
        import spark.skins.default.DefaultItemRenderer;

        private function list_itemRendererFunc(item:Object):ClassFactory {
            var cla:Class = DefaultItemRenderer;
            switch (item.type) {
                case "employee":
                    cla = EmployeeItemRenderer;
                    break;
                case "manager":
                    cla = ManagerItemRenderer;
                    break;
                default:
                    break;
            }
            return new ClassFactory(cla);
        }
    ]]>
</fx:Script>

<s:List id="list"
        labelField="name"
        itemRendererFunction="list_itemRendererFunc"
        horizontalCenter="0"
        verticalCenter="0">
0 голосов
/ 28 июня 2010

Вы можете создать компонент, чтобы он был обработчиком элементов, и чтобы он предоставлял разные представления в зависимости от данных в строке, используя состояния - переключаясь в состояние оценки при создании.

0 голосов
/ 28 июня 2010

Если разные данные встроены в соответствующую строку dataProvider, вы можете проверить данные в переопределенном методе public set data и соответственно установить цвет фона itemRenderer. Если вам нужно больше элементов управления в этой конкретной строке, вы можете использовать состояния. Просто установите this.currentState = "currentUser";

override public function set data(item:Object):void
{
  if(item.user == SomeGlobal.currentUser)//or outerDocument.currentUser
  {
    this.currentState = "currentUser";
  }
  else
  {
    //reset to default state, coz item renderers are reused
    this.currentState = "";
  } 
}

Если вы не знакомы с состояниями, существует множество примеров использования состояний в Flex

...