flash as3 - объявление нулевого свойства в объекте или запуск функции в объявлении объекта - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть объект, которому присваивается ряд свойств:

var project_array:Array = [];
var slideObject:Object = {
            project_title : myXML.projects.project[i].title.toUpperCase(),
            project_desc : myXML.projects.project[i].description.toUpperCase(),
            project_name : myXML.projects.project[i].name.toUpperCase(),
            project_agency : myXML.projects.project[i].agency.toUpperCase(),
            project_img : myXML.projects.project[i].@img,
            project_types : myXML.projects.project[i].@type.split(", ")
        }
project_array.push(slideObject);

Что я хочу сделать, это на основе значений в slideObject.project_types создать еще один массив в slideObject, который отслеживает project_clips - например:

for ( var i in project_types_array) {

        /*(var typeClass:Class = getDefinitionByName('type_' + project_types_array[i]);
        (var typeClip:typeClass = new typeClass();
        project_clips_array.push(typeClip);
        trace (project_types_array[i]);*/

        switch (project_types_array[i]){

        case "p":
            var clip_p = new type_p();
            project_clips_array.push(clip_p);
            break;
        case "exp":
            var clip_exp = new type_exp();
            project_clips_array.push(clip_exp);
            break;
        case "f":
            var clip_f = new type_f();
            project_clips_array.push(clip_f);
            break;
        case "oi":
            var clip_oi = new type_oi();
            project_clips_array.push(clip_oi);
            break;
        case "tv":
            var clip_tv = new type_tv();
            project_clips_array.push(clip_tv);
            break;
        }

    }

но я не совсем уверен, где это разместить. Если я помещу его за пределы конструктора объекта, то получу «термин не определен», я полагаю, потому что он не знает, что такое project_clips_array - но если я объявляю project_clips_array в конструкторе, его, похоже, нужно определить, то есть я могу не создавать пустое свойство. Но я также не могу поместить его в конструктор, потому что он не позволяет мне запускать функцию внутри конструктора объекта. Каков правильный синтаксис или расположение кода для выполнения этой функции, чтобы получить массив внутри объекта?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

Я настроил это так:

for (var i=0;i<tp;i++){
        var slideObject:Object = {
            project_title : myXML.projects.project[i].title.toUpperCase(),
            project_desc : myXML.projects.project[i].description.toUpperCase(),
            project_name : myXML.projects.project[i].name.toUpperCase(),
            project_agency : myXML.projects.project[i].agency.toUpperCase(),
            project_img : myXML.projects.project[i].@img,
            project_types : myXML.projects.project[i].@type.split(", "),
            project_type_clips : [],
        }


        for (var j in slideObject.project_types){
            //trace ("object" + i + " | type " + j)
            switch (slideObject.project_types[j]){

            case "p":
                var clip_p = new type_p();
                slideObject.project_type_clips.push(clip_p);
                break;
            case "exp":
                var clip_exp = new type_exp();
                slideObject.project_type_clips.push(clip_exp);
                break;
            case "f":
                var clip_f = new type_f();
                slideObject.project_type_clips.push(clip_f);
                break;
            case "oi":
                var clip_oi = new type_oi();
                slideObject.project_type_clips.push(clip_oi);
                break;
            case "tv":
                var clip_tv = new type_tv();
                slideObject.project_type_clips.push(clip_tv);
                break;
            }


        } //end project_types loop

        project_array.push(slideObject);
    } // end object creation loop

    loadProject();

}
0 голосов
/ 22 февраля 2011

Я думаю, что-то вроде этого должно работать:

var project_array:Array = [];
var slideObject:Object = {
        project_title : myXML.projects.project[i].title.toUpperCase(),
        project_desc : myXML.projects.project[i].description.toUpperCase(),
        project_name : myXML.projects.project[i].name.toUpperCase(),
        project_agency : myXML.projects.project[i].agency.toUpperCase(),
        project_img : myXML.projects.project[i].@img,
        project_types : myXML.projects.project[i].@type.split(", ")
        }

slideObject.project_type_array = sortTypes(slideObject.project_types); 

project_array.push(slideObject);

function sortTypes(orig_array:Array):Array
{

    var type_array:Array = [];

    for ( var i in orig_array)
    {

        switch (orig_array[i])
        {

            case "p":
                var clip_p = new type_p();
                type_array.push(clip_p);
                break;
            case "exp":
                var clip_exp = new type_exp();
                type_array.push(clip_exp);
                break;
            case "f":
                var clip_f = new type_f();
                type_array.push(clip_f);
                break;
            case "oi":
                var clip_oi = new type_oi();
                new_array.push(clip_oi);
                break;
            case "tv":
                var clip_tv = new type_tv();
                type_array.push(clip_tv);
                break;
        }
    }

    return type_array;
}
...