Привет!
В свое время мне очень помогла фраза "Рендереров не существует". :о)) Все дело в данных.
Я со спарком не работал, но думаю там в этом плане не сильно должно отличаться.
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.selectedItem
s каждому ему (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;
}
}