Flex 3: странное поведение, когда функция выполняет простую математическую операцию - PullRequest
1 голос
/ 18 августа 2011

Итак, в одном из моих модулей переменная с именем numDays создается путем циклического просмотра некоторых XML-данных и нахождения максимального значения поля xml, вызывающего дни. После того, как переменная numDays найдена, я использую ее для определения ширины холста, выполнив:

wrapper.width = numDays * parentApplication.oneDay;

(oneDay - это значение, определяемое делением ширины окна на 14)

Итак, теперь, когда я знаю, насколько широк холст-обертка, я могу начать его заполнять. У меня есть четыре элемента, которые входят в оболочку: 1) описание роли, 2) левый контроллер, 3) текстовое поле имени (компонент автоматического предложения), 4) правый контроллер. Ширина описания роли - 30 пикселей. Левый и правый контроллеры имеют размер 20 пикселей каждый. Таким образом, чтобы получить ширину текстового поля имени, у меня есть функция, которая делает следующее:

nameTextbox.width = wrapper.width - 70;

по какой-то причине, когда я делаю это, приложение загружается не полностью. Это в значительной степени глохнет. У меня есть 30 «проектов» с 15 «позициями» в каждом из них. wrapper.width описывает ширину позиции, поэтому есть 450 текстовых полей с именами, которые пытаются выяснить. Вот почему все портится?

EDIT

Итак, из основного приложения вызывается модуль проекта. Из модуля проекта создается список с источником данных "позицииAC":

<mx:List id="wholePosition" dataProvider="{positionsAC}" width="100%" height="100%" paddingBottom="0" paddingLeft="0" paddingRight="0" paddingTop="0" backgroundAlpha="0" verticalScrollPolicy="off" itemRenderer="modules.position" useRollOver="false" selectable="false">

Ниже приведен к / п модуля позиционирования целиком

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

        [Bindable] public var positionInfo:Array;
        [Bindable] public var wholePositionID:Number;
        [Bindable] public var allData:Array;

        [Bindable] public var positions:XML;            
        [Bindable] public var startOffset:Number;
        [Bindable] public var numDays:Number;
        [Bindable] public var role:String;
        [Bindable] public var studentID:Number;
        [Bindable] public var conflict:Number;
        [Bindable] public var studentType:String;
        [Bindable] public var showInPrinciple:Number;

        [Bindable] public var positionX:Number = 0;
        [Bindable] public var positionWidth:Number = 0;
        [Bindable] public var sName:String = new String;
        [Bindable] public var asAC:ArrayCollection = new ArrayCollection;
        [Bindable] public var conflictBG:uint = 0xffffff;
        [Bindable] public var roleColor:uint = 0x000000;

        private function init():void
        {
            if (allData)
            {
                getInfo(allData);
                setBGColor();
                getPositionX();
                getPositionWidth();
                getRightStudents();
            }
        }

        private function getInfo(a:Array):void
        {
            var tempArray:Array = new Array;

            startOffset = Number(a[0]);
            numDays = Number(a[1]);
            positionWidth = parentApplication.oneDay * numDays;
            setStudentNameW();
            role = a[2];
            studentID = Number(a[3]);
            tempArray = parentApplication.studentsDBIDDict[String(studentID)] as Array;
            conflict = Number(a[4]);
            studentType = a[5];
            sName = "test";
            showInPrinciple = a[6];
        }

        private function setStudentNameW():void
        {
            if (numDays == 1)
            {
                studentName.width = 55;
                studentName.x = 37;
                contractLeft.visible = false;
                contractRight.visible = false;
            }
            else if (numDays == 2)
            {
                Alert.show("HI");
                studentName.width = 133;
            }
            else if (numDays == 3)
                studentName.width = 230;
            else if (numDays == 4)
                studentName.width = 330;

            if (numDays > 1)
            {
                studentName.x = 47;
                contractLeft.visible = true;
                contractRight.visible = true;                    
            }
        }

        public function setBGColor():void
        {
            if (conflict == 1)
                conflictBG = parentApplication.errorColor;
            else if (conflict == 2)
                conflictBG = parentApplication.okErrorColor;
            else
                conflictBG = 0xFFFFFF;
        }

        private function getPositionX():void
        {
            positionX = parentApplication.oneDay * startOffset - 1;
        }

        private function getPositionWidth():void
        {
            positionWidth = parentApplication.oneDay * numDays;
        }

        private function getRightStudents():void
        {
            if (studentType == "freshman")
                makeASAC(parentApplication.freshmanAC);
            else if (studentType == "bfa1")
                makeASAC(parentApplication.bfa1AC);
            else if (studentType == "bfa2")
                makeASAC(parentApplication.bfa2AC);
            else if (studentType == "bfa3")
                makeASAC(parentApplication.bfa3AC);
            else if (studentType == "mfa1")
                makeASAC(parentApplication.mfa1AC);
            else if (studentType == "mfa2")
                makeASAC(parentApplication.mfa2AC);
            else if (studentType == "mfa3")
                makeASAC(parentApplication.mfa3AC);
            else if (studentType == "mfaw1")
                makeASAC(parentApplication.mfaw1AC);
            else if (studentType == "mfaw2")
                makeASAC(parentApplication.mfaw2AC);
            else if (studentType == "mfaw3")
                makeASAC(parentApplication.mfaw3AC);
        }

        private function makeASAC(students:ArrayCollection):void
        {
            for (var i:int = 0; i < students.length; i++)
                asAC.addItem(parentApplication.getStudentName(students.getItemAt(i)));
        }

        private function posLength(whichSide:String, expandContract:String):void
        {
            if (whichSide == 'l')
            {
                if (expandContract == 'e')
                {
                    if (startOffset > 0)
                    {
                        numDays++;
                        startOffset--;
                        getPositionX();
                        getPositionWidth();
                    }
                }
                else if (expandContract == 'c')
                {
                    if (numDays > 1)
                    {
                        numDays--;
                        startOffset++;
                        getPositionX();
                        getPositionWidth();
                    }
                }
            }
            else if (whichSide == 'r')
            {
                if (expandContract == 'e')
                {
                    if (numDays + startOffset < parentDocument.projectLength)
                    {
                        numDays++;
                        getPositionX();
                        getPositionWidth();
                    }
                }
                else if (expandContract == 'c')
                {
                    if (numDays > 1)
                    {
                        numDays--;
                        getPositionX();
                        getPositionWidth();
                    }
                }
            }

            //parentApplication.conflicts();
        }
    ]]>
</mx:Script>    

<mx:Canvas id="positionWrapper" width="{positionWidth}" height="25" backgroundColor="#ffffff" horizontalScrollPolicy="off" borderColor="#000000" borderStyle="solid" borderThickness="1">
    <mx:Text id="roleText" text="{role}" width="25" y="3" color="{roleColor}" fontSize="11" fontWeight="bold" click="parentApplication.getDictLen(parentApplication.studentsDBIDDict)" />
    <mx:Canvas id="leftSide" x="25" width="22" height="100%" mouseOver="expandLeft.visible = true; contractLeft.visible = true;" mouseOut="expandLeft.visible = false; contractLeft.visible = false;" backgroundColor="{conflictBG}" horizontalScrollPolicy="off"> 
        <mx:Image id="expandLeft" source="images/addRed.png" y="5" click="posLength('l', 'e')" mouseOver="parentApplication.switchCursor(true);" mouseOut="parentApplication.switchCursor(false);" visible="false" />
        <mx:Image id="contractLeft" source="images/minusRed.png" x="10" y="5" click="posLength('l', 'c')" mouseOver="parentApplication.switchCursor(true);" mouseOut="parentApplication.switchCursor(false);" visible="false" />
    </mx:Canvas>
    <components:AutoComplete id="studentName" textAlign="center"
        dataProvider="{asAC}"
        x="47" y="3"
    />
    <mx:Image id="showSNW" source="images/searchicon.png" x="{(studentName.width + studentName.x) - 12}" y="5" visible="false" mouseOver="parentApplication.switchCursor(true); studentName.enabled = false;" mouseOut="parentApplication.switchCursor(false); studentName.enabled = true; showSNW.visible = false;" />
    <mx:Canvas id="rightSide" x="{positionWrapper.width - 22}" width="20" height="100%" mouseOver="expandRight.visible = true; contractRight.visible = true;" mouseOut="expandRight.visible = false; contractRight.visible = false;" backgroundColor="{conflictBG}" horizontalScrollPolicy="off">
        <mx:Image id="contractRight" source="images/minusRed.png" y="5" click="posLength('r', 'c')" visible="false" mouseOver="parentApplication.switchCursor(true);" mouseOut="parentApplication.switchCursor(false);" />
        <mx:Image id="expandRight" source="images/addRed.png" x="10" y="5" click="posLength('r', 'e')" visible="false" mouseOver="parentApplication.switchCursor(true);" mouseOut="parentApplication.switchCursor(false);" />
    </mx:Canvas>
</mx:Canvas>

1 Ответ

0 голосов
/ 18 августа 2011

Лучше всего получить отладчик. Flash Builder 4 довольно приличный, и они даже выдают бесплатные стандартные лицензии на

  • Студенты, преподаватели и сотрудники соответствующих учебных заведений
  • Разработчики программного обеспечения, на которых влияет текущее экономическое состояние и которые в настоящее время не имеют работы
  • Участники мероприятия, которые получают специальный промо-код на своем мероприятии

Проверьте это

Кроме того, вы можете получить отладочные версии последней версии Flash Player здесь

Бесплатный стандарт может занять некоторое время, но тем временем вы всегда можете использовать бесплатную пробную версию.

При отладке убедитесь, что nameTextBox не равно нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...