Список искр в ActionScript: передача макета и itemRenderer в конструкторе - PullRequest
1 голос
/ 03 мая 2011

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

Поскольку невозможно передать параметры конструктору компонента MXML, я решил, что должен создать свойСписок в Actionscript.

Я подумал, что это будет примерно так:

public class GenericList extends List {
   public function GenericList(iR:ItemRenderer, ac:ArrayCollection, layout:LayoutBase) {
     super();
     this.dataProvider = ac;
     this.layout =  ...     // don't even have access to this.layout
     this.itemRenderer = iR // Cannot pass itemRender 
}

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

1 Ответ

0 голосов
/ 21 мая 2011

Нельзя установить свойство itemRenderer списка, которое должно реализовывать IClassFactory. Итак, ваше задание будет выглядеть так:

public function GenericList(cf:ClassFactory, ac:ArrayCollection, layout:LayoutBase) {

И экземпляр будет:

var myList:GenericList = new GenericList( new ClassFactory( com.company.renderers.MyItemRenderer, ....);

Относительно макета: По сути, List включает в себя DataGroup, поэтому вам нужен доступ к макету группы данных. Однако dataGroup еще не обязательно будет создан. Поэтому вам, возможно, придется создать частное свойство, которое вы затем используете в commitProperties.

private var _myLayout:LayoutBase; (populate in constructor via getter/setter)
protected var layoutInvalidated:Boolean;

public function set myLayout( layout:LayoutBase):void {
    _myLayout = layout;
    layoutInvalidated = true;
}

override protected function commitProperties():void {
    super.commitProperties();
    if( layoutInvalidated && dataGroup && dataGroup.layout ) {
        layoutInvalidated = false;
        dataGroup.layout = _myLayout;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...