Flex 4: проблема динамического ComboBox / List [object Object_Type] даже с определенным labelField - PullRequest
1 голос
/ 21 апреля 2010

Я динамически заполняю ComboBox HTTP-сервисом, вызывающим XML-файл. Все это работает через интерфейс Flash Build 4. Ниже приведен код ComboBox:

 <s:ComboBox id="cbSockOptions" change="cbSockOptions_changeHandler(event)" 
    selectedIndex="1" 
    enabled="true" 
    creationComplete="cbSockOptions_creationCompleteHandler(event)" 
    labelField="Symbol">
       <s:AsyncListView list="{TypeUtility.convertToCollection(Operation1Result2.lastResult.Company)}"/>
 </s:ComboBox>

Как уже говорилось выше, мой код заполняет ComboBox. Я хотел бы получить выбранное значение из ComboBox, но когда я это делаю, я получаю следующий вывод (например, когда представлен в метке):

[объект Company_Type]

В настоящее время я использую следующий код для получения значения ComboBox

cbSockOptions.selectedItem;

Все, что я прочитал по этой теме, говорит, что я должен указать 'labelField' в моем ComboBox, что я и делаю. Тем не менее, я все еще вижу [объект Company_Type] как вывод, а не реальное значение.

помощь! (

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Размещение этого сообщения, чтобы помочь людям с подобной проблемой. У меня была проблема [объект Object] в моих списках зажигания, и они прекрасно показывали бы использование статических данных, но не динамические коллекции, извлекаемые с сервера. После бесчисленных мертвецов я начал возиться. Я использовал пользовательские скины и элементы рендеринга, поэтому я использовал стандартный список свечей, и это сработало. Я добавил свой собственный элемент рендеринга в стандартный список искр и снова получил [объект Object]. Итак, я решил, что проблема была с моим пользовательским рендером элемента.

И решение ... По умолчанию Flash Builder 4 заставляет базовые элементы визуализации извлекать строковую информацию из объекта «{data}». Просто измените его на "{label}" в вашем средстве визуализации элементов, чтобы иметь возможность использовать labelFunction со сложными объектами и пользовательскими оболочками.

1 голос
/ 21 апреля 2010

Свойство labelfunction применяется только к отображению значений в ComboBox. В ComboBox есть свойство selectedLabel, но оно не помечено как связываемое. Если вы хотите использовать selectedItem в другом месте, вам нужно получить прямой доступ к свойствам.

Переходя от простого к сложному, вы можете попробовать

<s:Label text="{ cbSockOptions.selectedItem[cbSockOptions.labelField] }" />

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

Лучше было бы привести выбранный элемент к тому же типу, что и элементы в коллекции, созданной TypeUtility.convertToCollection, например,

<s:Label text="{ CompanyClassName( cbSockOptions.selectedItem ).propertyToDisplay }" />

Лучшей идеей будет использование вашего cbSockOptions_changeHandler для установки локальной переменной (например, selectedCompany), которую следует использовать для привязки. Если ваши классы являются Bindable, то вы можете просто использовать selectedCompany

<s:Label text="{ selectedCompany.propertyToDisplay }" />

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

<s:Label text="{ propertyToDisplay }" />
...