Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 06.02.2011, 23:57
im4LF вне форума Посмотреть профиль Отправить личное сообщение для im4LF Найти все сообщения от im4LF
  № 1  
Ответить с цитированием
im4LF

Регистрация: Apr 2010
Сообщений: 19
По умолчанию Проблема с изменением binding переменных

Приложение имеет список, itemRenderer внутри себя кнопку, при клике на которую вызывается dispatchEvent

Код самого приложения:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   creationComplete="creationCompleteHandler(event)">
	<fx:Script>
		<![CDATA[
			import events.SomeItemEvent;
 
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;
			import mx.utils.ObjectUtil;
 
			[Bindable] private var items:ArrayCollection; // вот тот самый binding
 
			protected function creationCompleteHandler(event:FlexEvent):void
			{
				items = new ArrayCollection();
				items.addItem({ title: "A" });
				items.addItem({ title: "B" });
				items.addItem({ title: "C" });
 
				// обработчик события высплывающего из itemRenderer'a
				addEventListener(PreviewItemEvent.EDIT, function(e:SomeItemEvent):void {
					// обновляю значение
					e.item.title = Math.random(); 
					// данные обновляются, но внутри itemRenderer'a изменения не подхватываются
					trace(ObjectUtil.toString(items));
				});
			}
		]]>
	</fx:Script>
	<s:List dataProvider="{items}" itemRenderer="TestItemRenderer" width="400" height="300">
		<s:layout>
			<s:TileLayout horizontalGap="10" verticalGap="10" />
		</s:layout>
	</s:List>
</s:Application>
ItemRenderer:

Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
				xmlns:s="library://ns.adobe.com/flex/spark" 
				xmlns:mx="library://ns.adobe.com/flex/mx" 
				autoDrawBackground="true"
				width="100" height="100">
	<fx:Script>
		<![CDATA[
			import events.SomeItemEvent;
 
			protected function update_clickHandler(e:MouseEvent):void
			{
				// внутрь события передается текущая data
				dispatchEvent(new SomeItemEvent(SomeItemEvent.UPDATE, true, false, data));
			}
		]]>
	</fx:Script>
 
	<s:Button id="update" label="{data.title}" click="update_clickHandler(event)" verticalCenter="0" horizontalCenter="0" />
</s:ItemRenderer>
Код SomeItemEvent:

Код AS3:
package events
{
	import flash.events.Event;
 
	public class SomeItemEvent extends Event
	{
		public static const UPDATE:String = "update";
		public var item:Object;
 
		public function SomeItemEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false, item:Object=null)
		{
			this.item = item;
			super(type, bubbles, cancelable);
		}
	}
}
Подскажите как заставить itemRenderer подхватывать изменения. Или может это вообще неверный путь я выбрал?

Спасибо.

Создать новую тему   Часовой пояс GMT +4, время: 22:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.