Показать сообщение отдельно
Старый 28.04.2016, 00:21
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 5  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Привет!
В свое время мне очень помогла фраза "Рендереров не существует". :о)) Все дело в данных.
Я со спарком не работал, но думаю там в этом плане не сильно должно отличаться.

1) Показываем инфу.
Из PostIR навсегда выкидываем itemrenderer1_creationCompleteHandler(event:FlexEvent):void
Дальше можно через сеттер data, либо биндингом. Так как по идее в PostIR в дату приходит PostData, то можно сразу забиндить
Код AS3:
<c:CheckList id="soc" dataProvider="{data.resources}" .../>. События пока из него удалить
socIR в данном случае вообще тупой как дрова. Так же данные (ResData) либо через сеттер получаем, либо биндим (как частично уже сделано с лейблом и картинкой)
Код AS3:
<s:CheckBox id="socCheck" selected="{data.selected}" />
selected.selected="true" selected.normal="false" пока в мусорку
Код весь тоже удаляем - оставляем один мхмл.
Стейты - тоже

Тестим отображение и перетаскивание!!

Добавлено через 3 минуты
Код AS3:
override public function set data(value:Object):void
            {
                super.data = value;
                 if (value.selected) {
                    data.selected = true;
                } else {
                    data.selected = false;
                }  
            }

Тут смешной парадокс :о)) в value приходит ResData, которая сразу попадает в data , ну а дальше сам понимаешь :о))

Добавлено через 20 минут
Изменение чекбоксов и дополнение отображения.
Тут все по идее просто и делается в postIR
1) Подписываемся на CHANGE у c:CheckList (Это стандартный компонент? Если нет, то лучше пока на обычный поменять лист) в обработчике пробегаем по data.resources и всем selected = false; потом бежим по массиву event.currentTarget.selectedItems каждому ему (ResData) selected = true;
Вроде должно работать.



И насчет отображения первоначального забыл. Все-таки чтобы чекбоксы не только отмечались, но и выделялись как выбранные элементы списка. Идем в postIR
1) Создаем переменную например
Код AS3:
 
[Bindable] 
private var _selectedResData:Array;
2) прикручиываем к
Код AS3:
<c:CheckList id="soc" dataProvider="{data.resources}" selectedItems="{_selectedResData}" .../>.
3)оверрайдим сеттер дата у postIR
в нем, если дата пришла - создаем массивчик, бежим по дата.ресурсес и пихаем в новый массивчик РесДаты у которых селектед = труе.
И после пихаем указатель массивчика в _selectedResData. Его это будоражит, он генерит событие (или как там биндинг сделан) И выделяет нужные чекбоксы.


Короче, вот так, но это самый простой путь, который я не очень люблю. Биндинг удобен, но как-то не по нраву мне. А ну и я бы повесил биндинг на конкретные поля, которые будем использовать для отображения в итем рендерерах. Но тут не знаю, что лучше.
Код AS3:
ackage
{
	import flash.events.EventDispatcher;
 
 
	public class ResData extends EventDispatcher
	{
		public var uid:String;
                [Bindable]
		public var name:String;
                [Bindable]
		public var url:String;
		public var social:int;
		public var tags:String;
		public var mintags:int;
		public var maxtags:int;
                [Bindable]
		public var selected:Boolean;
	}
}
Код AS3:
package
{
	import flash.events.EventDispatcher;
	import mx.collections.ArrayCollection;
 
 
	public class PostData extends EventDispatcher {
		public var sort:int;
		public var uid:String;
[Bindable]
		public var text:String;
		public var image:String;
		public var url:String;
		public var socials:Vector.<int>;
		public var res:Vector.<int>;
[Bindable]
		public var resources:ArrayCollection;
		public var tags:String;
		public var published:Boolean;
	}
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 28.04.2016 в 00:53.