Функция комбинированного списка Flex - PullRequest
0 голосов
/ 14 марта 2011

У меня есть два вопроса относительно комбинированного списка Flex.

  1. Строка, представляющая имя функции, будет прочитана из xml @ run time.

    var combo: ComboBox = new ComboBox (); combo.labelFunction = "functionName";

Как мне этого добиться?

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

    var combo: ComboBox = new ComboBox (); combo.labelField = "person.firstName";

Мой класс выглядит так,

public class Test
{
     public var person:PersonDTO;
}

public class PersonDTO
{
     public var firstName:String;
}

Можно ли получить доступ к любому многоуровневому тексту с помощью поля метки поля со списком?

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Вам нужно передать функцию, а не имя.При этом

combo.labelFunction = "functionName";

передает строку.Единственное, что я могу обойти, - это сделать оператор switch с одним регистром для каждой функции, которая у вас может быть.Затем назовите это «case» изнутри вашего xml.

switch( xml.@labelfunction ){
   case 'func1':
      combo.labelFunction = this.func1;
      break;
   case 'func2':
      combo.labelFunction = this.func2;
      break;
}

Хак, но должно работать.

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

объявление 1) labelFunction

Вызов функций, когда вы знаете только имя как String, довольно прост. В следующих фрагментах показано, как выполнить функцию, которая является членом того же класса. Если вам нужно вызвать функцию из другого класса, замените this на соответствующее имя переменной.

private function comboBox_labelFunction(item:Object):String
{
    var functionName:String = myXml.@labelFunctionName;
    return this[functionName](item);
}

объявление 2) labelField

Обычно невозможно использовать "person.firstName" в качестве labelField. Тем не менее, вы должны иметь возможность использовать его в своей функции labelFunction. Как-то так должно работать ...

private function comboBox_labelFunction(item:Object):String
{
    var labelField:String = "person.firstName";
    var attributeNames:Array = labelField.split(".");

    for each (var attributeName:String in attributeNames)
    {
        if (item && item.hasOwnProperty(attributeName))
            item = item[attributeName];
        else
            return null;
    }

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