Проблема с получением всплывающей подсказки для правильного обновления на элементе рендера в Flex - PullRequest
2 голосов
/ 02 декабря 2010

У меня возникла следующая проблема.

У меня есть ArrayCollection, которая выступает в качестве поставщика данных для списка плиток (называемого FavoritesLinksList)

Я использую itemRenderer с именем FavoriteItem в качестве itemRenderer списка плиток,Этот элемент FavoriteItem выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
 width="280" height="163"
 horizontalAlign="center"
 paddingLeft="5" paddingRight="5" paddingTop="0" paddingBottom="0" xmlns:ns1="*">

 <mx:Canvas width="100%" height="100%">
  <mx:Image
   id="thumbnail"
   width="178" height="115"
   source="{data.thumbnail}"
   toolTip = "{data.tooltip}" x="46" y="10"/>

  <mx:Text
   id="title"
   text="{data.tileListTitle}" 
   width="254"
   toolTip="{data.tooltip}" x="10" y="133"/>
 </mx:Canvas>

</mx:VBox>

Как видите, всплывающие подсказки для двух элементов в нем взяты из data.tooltip

Это прекрасно работает.

Проблема заключается в обновлении всплывающей подсказки, когда она изменилась.

Объекты (типа Object) в ArrayCollection имеют свойство tooltip (очевидно, так как именно из него itemRenderer получает информацию).

Когда я изменяю это свойство на его новое значение, всплывающая подсказка itemRenderer не изменяется, чтобы отразить это.

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

Пример:

event.itemRenderer.title.toolTip = event.currentTarget.selectedItem.tooltip;

после обновления всплывающей подсказки, но это дает ошибку компиляции: доступ к возможно неопределенному заголовку свойства через ссылку сстатический тип mx.controls.listКлассы: IListItemRenderer.

Я также попытался выполнить функцию refresh () над любимыми ссылкамиСписок массив массивов, но это дало смешанные результаты.Подсказка была обновлена ​​правильно, но один из элементов (первый) в списке листов пропал без вести!Это похоже на ошибку Flex.Поставщик данных имеет одинаковое количество элементов до и после обновления, и этого не произойдет, если я щелкну первый элемент в списке плиток.

Вся помощь очень важна.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2010

Нашел решение моей проблемы.

FavoritesLinksList является привязываемым и устанавливается как dataProvider для tileList. Однако изменения отдельных объектов не распространялись на itemRenderer.

Я подумал, что в самой любимой коллекции ArrayLinksList должно быть изменение.

Как уже упоминалось в моем вопросе, я уже пытался использовать FavoritesLinksList.refresh (), но это привело к исчезновению первого элемента в tileList (хотя, похоже, он все еще находится в коллекции Array). Возможно, ошибка во Flex?

Во всяком случае, обнаружил, что способ обойти это было выполнить следующее:

favoriteLinksList.setItemAt(favoriteObject, favoriteLinksList.getItemIndex(favoriteObject));

По сути, я устанавливаю элемент с индексом X для себя, поэтому фактически ничего не делаю, но этого достаточно для itemRenderer, чтобы обновить данные для itemRenderer.

0 голосов
/ 02 декабря 2010

Я бы сделал 2 вещи

  1. что объект на самом деле является привязываемым, и изменение происходит и попадает в средство визуализации элементов

  2. возможное решение => переопределить установщик для свойства данных в средстве визуализации элементов, не забудьте вызвать super.data = value

-

override public function set data(value:Object):void
{
 super.data = value;
 title.toolTip = data.tooltip;
}

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

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