Обработка данных FLEX, отделяющая данные для отображения гистограммы от вызова PHP - PullRequest
0 голосов
/ 25 мая 2011

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

Я создал статическую версию гистограммы и отделил массив Collection вручную. Я не хочу, чтобы это делалось вручную, мне нужно делать это динамически. Итак, я пытаюсь понять, куда поместить обработчик событий, как добавить в collectionArray, а затем построить массив (ы) коллекции. использовать эту информацию для построения гистограмм ...

    /*
         *
        36, > 2 years, Compliance
        6, 0-90 Days, Compliance
        32, 181-365 Days, Compliance
        72, 366-730 Days, Compliance
        15, 91-180 Days, Compliance
        4, > 2 years, Medium/Low
        118, 0-90 Days, Medium/Low
        143, 181-365 Days, Medium/Low
        29, 366-730 Days, Medium/Low
        67, 91-180 Days, Medium/Low
        10, > 2 years, Patient Safety
        2, 0-90 Days, Patient Safety
        17, 181-365 Days, Patient Safety
        18, 366-730 Days, Patient Safety
        5, 91-180 Days, Patient Safety 
        */

мне нужна вышеуказанная информация переведено на нижнюю информацию использование обработчика завершенных событий onload.

        [Bindable]
        public var _compliance:ArrayCollection = new ArrayCollection([
            {Count:36, Time : "> 2 years"       },
            {Count:6,  Time : "0-90 Days"       },
            {Count:32, Time : "181-365 Days"    },
            {Count:72, Time : "366-730 Days"    },
            {Count:15, Time : "91-180 Days"     }
        ]);

        [Bindable]
        public var _medlow:ArrayCollection = new ArrayCollection([
            {Count:4,   Time : "> 2 years"      },
            {Count:118, Time : "0-90 Days"      },
            {Count:143, Time : "181-365 Days"   },
            {Count:29,  Time : "366-730 Days"   },
            {Count:67,  Time : "91-180 Days"    }
        ]);;

        [Bindable]
        public var _patient:ArrayCollection = new ArrayCollection([
            {Count:10, Time : "> 2 years"       },
            {Count:2,  Time : "0-90 Days"       },
            {Count:17, Time : "181-365 Days"    },
            {Count:18, Time : "366-730 Days"    },
            {Count:5,  Time : "91-180 Days"     }
        ]);;

Ответы [ 2 ]

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

Спасибо, Брайан Мне нравится ваш способ лучше, чем мое решение, так как оно меньше и может быть многократно использовано getAllItemsResult - это набор данных от вызова к серверу.

    public function setData():void{

        var t_com:Object = new Object();
        var t_med:Object = new Object();
        var t_pat:Object = new Object();

            for (var i:Object in getAllItemsResult.lastResult)
            {
                var n:Object = getAllItemsResult.lastResult[i];
                var t:Object = new Object();

                switch(n['Priority']){
                    case 'Compliance':
                        t = {
                                'Count' : getAllItemsResult.lastResult[i]['THECOUNT'],
                                'Time': getAllItemsResult.lastResult[i]['CAPA_AGE']
                            }
                        t_com.addItem(t);
                    break;
                    case 'Medium/Low':
                        t = {
                                'Count' : getAllItemsResult.lastResult[i]['THECOUNT'],
                                'Time': getAllItemsResult.lastResult[i]['CAPA_AGE']
                            }
                        t_med.addItem(t);                           
                    break;
                    case 'Patient Safety':
                        t = {
                                'Count' : getAllItemsResult.lastResult[i]['THECOUNT'],
                                'Time': getAllItemsResult.lastResult[i]['CAPA_AGE']
                            }
                        t_pat.addItem(t);
                    break;
                    default:
                    break;
                }

            }

            var sortArr:Array = new Array("0-90 Days","91-180 Days","181-365 Days","366-730 Days","> 2 years");
            //loop through array then add items to occording to array length

        }


    ]]>

Теперь я должен выяснить, как сортировать проклятую вещь!

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

Как сказал @J_A_X, подобные данные усложняют ситуацию, потому что анализировать их становится вашей работой. Но не важно. Вы можете просто выполнить некоторую split работу, чтобы выполнить разбор здесь. Предполагая, что ваши строки разделены символом "\ n", тогда должно работать следующее. Я использую ActionLinq , что делает обработку данных на одном дыхании.

Я предполагаю, что ваши данные с сервера были помещены в строку с именем serverData:

private function parseLine(line:String):Object {
    var split:Array = line.split(", ");
    return { Count: Number(split[0]), Time: split[1], Category: split[2] };
}

private function getDataBy(category:String):ArrayCollection {
    return Enumerable.from(serverData.split("\n"))
            .select(parseLine)
            .where(function(x:*):Boolean { return x.Category == category })
            .toArrayCollection();
}

[Bindable] public var _compliance:ArrayCollection;
[Bindable] public var _medlow:ArrayCollection;
[Bindable] public var _patient:ArrayCollection;

Затем, когда вы вернете свои данные с сервера, вы можете заполнить свои ArrayCollection s:

_compliance = getDataBy("Compliance");
_medlow = getDataBy("Medium/Low");
_patient = getDataBy("Patient Safety");
...