Flex: добавление элементов в DropDownList с помощью ItemRenderer - PullRequest
1 голос
/ 17 марта 2011

У меня есть структура XML, такая как:

<Main>
  <Category1>
    <Data Name="Data1">
      <Item>
        <Name>foo</Name>
        <Info>bar</Info>
      </Item>
      <Item>
        <Name>baz</Name>
        <Info>FOO</Info>
      </Item>
    </Data>
    <Data Name="Data2">
    </Data>
  </Category1>
  <Category2>
    </Category2>
</Main>

Я использую пользовательский DropDownList , чтобы заполнить его с помощью ItemRendererFunction:

<s:Label text="{data.attribute('Name')}" top="3" left="10" right="10" bottom="3" color="0xFF00FF" />

, если он имеетАтрибут «Имя», иначе обычная метка.

Функция рендеринга:

public function renderNode(item:*):IFactory
{
    if (item.attribute('Name') != null)
        return new ClassFactory(SpecialItemRenderer);
    else
        return new ClassFactory(RegularItemRenderer);
}

Однако я указываю XML в форме dataProvider как dProv.child ('Category1'), поэтому я получаю только 2 <Data> узлы в renderNode().Но я также хочу заполнить узлы <Item> одновременно.

Я пытался использовать цикл с использованием новой функции itemRendererFunction newFunc(item:*):void:

var nodes:XMLNode = item.children();
while(nodes)
{
    this.renderNode(nodes);
    nodes = nodes.nextSibling;
} 

, но получил ошибку времени выполнения, поскольку newFunc() ничего не будет возвращать.

Затем я внес изменения в исходный renderNode(), динамически создав элемент mx:Label и добавив его к this через this.addElement(newLabel), но это не поместило бы Метку в раскрывающийся список, нона вершине контроля.

Итак, я хотел бы знать, есть ли способ динамического добавления этих элементов / метки при анализе исходных данных XML?

С уважением,
Нишет Бартвал

1 Ответ

0 голосов
/ 29 марта 2011

Возможно, я неправильно понимаю, что вы пытаетесь сделать, но вам не следует напрямую вызывать функцию itemRendererFunction. Вам необходимо установить свойство itemRendererFunction DropDownList для вашей функции renderNode и позволить DropDownList вызывать его, когда это необходимо.

Вот базовый пример того, как использовать функцию itemRenderer:

http://blog.flexexamples.com/2009/03/19/using-a-custom-item-renderer-function-with-the-fxlist-control-in-flex-gumbo/

Ура!

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