Как обойти случаи, когда данные listProvider возвращаются как ОДНА отдельная запись?

Я использую HTTPservice для загрузки XML и отображения результатов в списке - он работает, когда найдено более 1 записи XML .... но когда есть только ОДНА единственная возвращенная запись XML, она по какой-то причине обрабатывается по-разному и генерирует эту ошибку :

Suspended: TypeError: Error #1034: Type Coercion failed: cannot convert mx.utils::ObjectProxy

Я вижу такие сообщения:

http://anupushkaran.blogspot.com/2010/02/typeerror-error-1034-type-coercion.html

но я не могу понять, как адаптировать его к моему блоку кода HTTPService resultHandler ...

Я использую FB 4.6, и моя структура XML выглядит следующим образом:

SiteXYZ
   Events
      EventListing

и все данные, которые я хочу использовать, находятся в узле EventListing.

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

Еще одна вещь, которую я вижу, которая, как мне кажется, приближает меня ... когда я смотрю на TreeView> Response> Response Body на сетевом мониторе, я вижу, что при успешной поездке тело возвращается следующим образом:

SiteXYZ
  Events
     EventListing
        [0]
        [1]....  and so on....

Но в тех случаях, когда возвращается ОДНА запись, тело ответа возвращается как:

SiteXYZ
   Events
      EventListing

так что я не могу определить, когда это только ОДНА возвращенная запись, а затем соответствующим образом установить список dataProvider? так что при большом количестве возвращенных записей поставщик данных устанавливается с помощью:

list1.dataProvider = myXML.lastResult.SiteXYZ.Events.EventListing;

но если это всего лишь ОДНА возвращенная запись, как будет установлен этот dataProvider? это не сработало:

list1.dataProvider = lfXML.lastResult.LeisureFun.Events;

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


person tamak    schedule 14.03.2013    source источник
comment
Я столкнулся с этим года 2 назад с flex 3 и не помню, что делал. Но я думаю, что мне пришлось создать для него специальный рендерер элементов. Я могу посмотреть код через несколько часов   -  person The_asMan    schedule 15.03.2013
comment
@The_asMan - спасибо. Я ценю это. Я дошел до того момента, когда я в основном думал о дополнении моего xml дополнительной фальшивой записи, а затем установил какой-то тип флага, чтобы попытаться подавить / скрыть его ПОСЛЕ того, как список построен ... грустно, и я, вероятно, не буду этого делать - но я дал это серьезная мысль!   -  person tamak    schedule 15.03.2013
comment
Мне кажется, из описания, что в первой ситуации вы возвращаете массив. Во второй ситуации массив не возвращается. Мне это кажется необычным. Почему бы второй ситуации не вернуть массив с одним элементом? Нравится: EventListing [0]. Исправление несовместимой структуры должно решить проблему.   -  person JeffryHouser    schedule 15.03.2013
comment
именно ... это все мое дело. Я ожидал, что он просто сделает то же самое и вернет данные, как и ожидалось, но все это возвращается по-разному, когда меня действительно беспокоит одна запись. Вот объяснение, которое я видел, объясненное на веб-сайте / URL-адресе, на который я ссылался в исходном сообщении: Хотя мы получаем доступ к данным с сервера, в большинстве случаев результат возвращается как ArrayCollection. Но есть шанс, что он может попасть к клиенту как ObjectProxy. Например, если мы читаем XML-файл, имеющий только ноль или один тег, он не вернет результат как ArrayCollection, а как ObjectProxy.   -  person tamak    schedule 15.03.2013


Ответы (1)


Ответ был на исходном веб-сайте, на который я ссылался ....

Я внимательно посмотрел на то, что в этом сообщении говорилось о представленной проблеме, и как этот фрагмент кода решал ее, и смог заставить ее работать для меня, поместив ее в свой блок resultHandler ...

arr=new ArrayCollection();
if(event.result.SiteXYZ.Events.EventListing is ArrayCollection)
{
arr = ArrayCollection(event.result.SiteXYZ.Events.EventListing);
}
if(event.result.SiteXYZ.Events.EventListing is ObjectProxy)
{
arr =new ArrayCollection(ArrayUtil.toArray
    (event.result.SiteXYZ.Events.EventListing));
}

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

спасибо за помощь ... Я обязательно сохраню этот фрагмент для использования в будущем!

person tamak    schedule 14.03.2013