Flex 3: вопросы по списку itemRenderers - нужны элементы в отдельных полях, а не только в столбцах - PullRequest
0 голосов
/ 29 июля 2011

Я импортирую некоторую информацию через XML;ниже приведен пример одного набора информации (для «проекта»), хотя в конечном приложении может быть до 30-40:

<phases>
    <project>
        <dbID>15</dbID>
        <workingTitle>Motherfuckers</workingTitle>
        <projName>5f3-2011</projName>
        <startDate>8/10/2011</startDate>
        <preprod>1</preprod>
        <prod>2</prod>
        <postprod>1</postprod>
        <positions>
            <position>
                <startOffset>0</startOffset>
                <numDays>4</numDays>
                <role>PR</role>
                <studentid>1193</studentid>
                <conflict>0</conflict>
                <studentType>bfa1</studentType>
            </position>
            <position>
                <startOffset>0</startOffset>
                <numDays>4</numDays>
                <role>DR</role>
                <studentid>1194</studentid>
                <conflict>4</conflict>
                <studentType>bfa1</studentType>
            </position>
            <position>
                <startOffset>0</startOffset>
                <numDays>4</numDays>
                <role>WR</role>
                <studentid>1194</studentid>
                <conflict>4</conflict>
                <studentType>bfa1</studentType>
            </position>
            <position>
                <startOffset>0</startOffset>
                <numDays>4</numDays>
                <role>BO</role>
                <studentid>1308</studentid>
                <conflict>0</conflict>
                <studentType>bfa1</studentType>
            </position>
        </positions>
    </project>
</phases>

Теперь я уже создал функцию дляСортируйте всю информацию XML и сохраните ее в arrayCollection под названием projectsAC.Затем я создал список с поставщиком данных «projectsAC» и itemRenderer из «modules.project»:

<mx:Canvas id="mainWrapper" width="100%" height="100%" y="90" verticalScrollPolicy="on" horizontalScrollPolicy="off">
    <mx:VBox>
        <mx:Canvas id="projectsWrapper" horizontalScrollPolicy="off" verticalScrollPolicy="off">
            <mx:List id="projectsList" dataProvider="{projectsAC}" itemRenderer="modules.project" />
        </mx:Canvas>
    </mx:VBox> 
</mx:Canvas>

Модуль проекта находится ниже:

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:Scheduler="modules.*" layout="absolute" creationComplete="init();" dataChange="dataArray = data as Array" horizontalScrollPolicy="off">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;

            private var dataArray:Array;

            // project information
            [Bindable] public var projectDBID:Number = 0;
            [Bindable] public var workingTitle:String = new String;
            [Bindable] public var projectNumber:String = new String;
            [Bindable] public var startDate:Date = new Date;
            [Bindable] public var positions:XML = new XML;
            [Bindable] public var positionsAC:ArrayCollection = new ArrayCollection;
            [Bindable] public var projectLength:Number = 0;

            // container information
            [Bindable] public var projectWidth:Number = 0;
            [Bindable] public var projectX:Number = 0;
            [Bindable] public var projectY:Number = 0;

            private function init():void
            {
                if (dataArray)
                    getInfo(dataArray);

                getProjLength();
                getProjWidth();
                getProjX();
            }

            public function getProjX():void
            {
                projectX = parentDocument.oneDay * parentDocument.dateDifference(parentDocument.startViewDate, startDate);
            }

            public function getProjWidth():void
            {
                projectWidth = parentApplication.oneDay * projectLength;
            }

            public function getProjLength():void
            {
                var tempLength:Number = 0;
                var tempArray:Array = new Array;
                for each (var position:Object in positions.position)
                {
                    tempArray = new Array;
                    tempArray.push(position.startOffset);
                    tempArray.push(positions.numDays);
                    tempArray.push(positions.role);
                    tempArray.push(positions.studentid);
                    tempArray.push(positions.conflict);
                    tempArray.push(positions.studentType);
                    if (tempArray.length > 0)
                        positionsAC.addItem(tempArray);

                    if ((Number(position.startOffset) + Number(position.numDays)) > tempLength)
                        tempLength = Number(position.startOffset) + Number(position.numDays);
                }
            projectLength = tempLength;
            }

            private function getInfo(a:Array):void
            {
                a = fixA(a);
                projectDBID = a[0];
                workingTitle = a[1];
                projectNumber = a[2];
                startDate = parentApplication.textToDate(a[3]);
                positions = XML(a[4]);
            }

            private function fixA(a:Array):Array
            {
                var toReturn:Array = a;
                var toPush:String = "";
                var pushLocation:Number = 0;
                if (a.length > 5)
                {
                    toReturn.push(a[pushLocation]); pushLocation++;
                    for (var i:int = pushLocation; i < a.length - 4; i++)
                    {
                        if (toPush != "")
                        toPush += ", ";
                        toPush += a[i];
                        pushLocation++;
                    }
                    toReturn.push(toPush);
                    for (i = pushLocation; i < 3; i++)
                        toReturn.push(a[i]);
                }

                return toReturn;
            }
        ]]>
    </mx:Script>

    <mx:Canvas id="projectWrapper" backgroundColor="#000000" width="{projectWidth}" height="100%">      
    </mx:Canvas>
</mx:Module>

Этот код возвращаетв результате это выглядит так: Look/Feel using List itemRenderer

Мне нужно, чтобы это выглядело так: (как это выглядело, когда я использовал повторители вместо itemRenderers)

How it should look

На изображении выше выделенная синим цветом область - это то, что оболочка проекта, а выделенная фиолетовым цветом - это позиция в этом проекте, которую я планирую выполнить, создав еще один список с позицией itemRenderer.

Может кто-нибудьоказать некоторую помощь в попытке выяснить это.Я действительно не хотел бы возвращаться к использованию ретрансляторов, но у меня нет достаточно времени, чтобы тратить время на попытки выяснить это.: (

Заранее спасибо, Brds

РЕДАКТИРОВАТЬ:

@ MD - я внес следующие изменения в модуль проекта на основе того, чтоВы разместили в своем комментарии. После внесения изменений я загрузил приложение, и ни один из проектов не показывался: (

override protected function commitProperties():void
{
    projectWrapper.width = projectWidth;
    projectWrapper.x = projectX;
}

private function init():void
{
    invalidateProperties();
    if (dataArray)
    getInfo(dataArray);
    getProjLength();
    getProjWidth();
    getProjX();
    invalidateProperties();
}
...