Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Передача массива (http://www.flasher.ru/forum/showthread.php?t=22839)

Aib 11.11.2001 16:17

Передача массива
 
Вот такая задачка. Нужно передать массив объектов в HTML. При этом этот массив периодически меняет свой размер (в зависимости о кол-ва выбранных пользователем объектов).
Помогите, кто подобным занимался.
Зарание благодарен :rolleyes:

john 11.11.2001 16:29

думаю что самое верное решение в хтмл сгенерить хмл вида

<array>
<0 type="number|string|boolean">value</0>
<1 type="number|string|boolean">value</1>
...
<N type="number|string|boolean">value</N>
</array>

и передать как текстовую переменную,

во флэш же хмл конвертнуть в массив.

можно конечно проще, но данный метод наиболее универсален.

john 11.11.2001 16:32

или именно объектов? тогда немного сложнее, нужно предствить объект в виде хмл.
у меня есть готовая функция для флэш, если что могу дать. для JS ее переделать не составит труда.

Iv 11.11.2001 16:33

разбери массив в переменные и передавай...
примерно так:
for (i=0; i<=my_array.length; i++) {
eval("variable"+i) = my_array[i];
}
(на работоспособность не проверял :confused: )

john 11.11.2001 16:37

вот кину кусочек моей библиотеки для работы с трейсом. в ней есть методы для конвертирования объекта в хмл.

Код:

//*************************************************************************
//*************************************************************************
//
//        display objects in output window (trace function)
//
//*************************************************************************
//*************************************************************************
//-------------------------------------------------------------------------
//        author Evgeniy Potapenko (aka john) john@3wgraphics.com
//-------------------------------------------------------------------------

//-------------------------------------------------------------------------
//        convert object to XML
//-------------------------------------------------------------------------

Object.prototype.toXML = function(name,num)
{
        if(name == null)name=typeof(this);
        if(num == null)
        {
                num = 1;
                _root.array_for_delete_numbers = [];
        }
       
        var proto = this.__proto__;
        this.__proto__ = undefined;
       
        var atributes = " #="+"\""+num+".0"+"\"";
        this.number_for_trace_objects = num
        _root.array_for_delete_numbers.push(this);

        if(name == "movieclip")
        {
                atributes += " name=\""+this._name+"\"";
        }
       
        var XML_result = new XML("<"+name+atributes+"><tmp /></"+name+">");
       
        var type , element, marks;
       
        for(var v in this)
        {
                if(v=="__proto__" || v=="number_for_trace_objects" || v=="array_for_delete_numbers")continue;
               
                type = typeof(this[v]);
               
                if(type == "object" || type == "movieclip")
                {
                        if(!this[v].number_for_trace_objects)
                        {
                                if(this[v].__proto__ == Array.prototype)
                                {
                                        type = "array";
                                }else if(this[v].__proto__ == XML.prototype){
                                        type = "XML";
                                }else if(this[v].__proto__ == XMLSocket.prototype){
                                        type = "XMLSocket";
                                }else if(this[v].__proto__ == Sound.prototype){
                                        type = "sound";
                                }
                               
                                element = new XML("<"+v+" />");
                               
                                if(type=="XML")
                                {
                                        element.firstChild.appendChild(this[v].firstChild.cloneNode(true));
                                }else{
                                        element.firstChild.appendChild(this[v].toXML(type,++num).firstChild);
                                }
                               
                        }else{
                               
                                this[v].number_for_trace_objects += 0.1;
                                atributes = " #="+"\""+this[v].number_for_trace_objects+"\"";
                                if(type == "movieclip")
                                {
                                        atributes += " name=\""+this[v]._name+"\"";
                                }
                                element = new XML("<"+v+atributes+" />");
                        }
                       
                }else{

                        marks=(type=="string")?"\"":"";
                       
                        if(type=="number"||type=="string"||type=="boolean")
                        {
                                atributes = "";
                        }else{
                                atributes = " type=\""+type+"\"";
                        }
                       
                        element = new XML("<"+v+((type=="function")?" type=\"function\"":"")+">"+
                        " "+marks+this[v]+marks+" "+"</"+v+">");
                       
                        if(element.firstChild.firstChild.nodeType==3 && element.firstChild.firstChild.nodeValue=="  ")
                        {
                                element.firstChild.firstChild.removeNode();
                        }
                }
               
                XML_result.firstChild.insertBefore(element.firstChild,XML_result.firstChild.firstChild);
        }
        XML_result.firstChild.lastChild.removeNode();
       
        if(XML_result.firstChild.attributes["#"] == "1.0")
        {
                for (var i=0;i<_root.array_for_delete_numbers.length;i++)
                {
                        delete _root.array_for_delete_numbers[i].number_for_trace_objects;
                }
                delete _root.array_for_delete_numbers;
        }
       
        this.__proto__ = proto;
        return XML_result;
}

//-------------------------------------------------------------------------
//        Object
//-------------------------------------------------------------------------

Object.prototype.toString = function()
{
        return this.toXML("Object").toString();
}

//-------------------------------------------------------------------------
//        XML
//-------------------------------------------------------------------------

XML.prototype.__proto__.toString = function(tab)
{
        var traced_value;
       
        if(this.nodeType!=3)
        {
                if(this.nodeName!=null)
                {
                        traced_value = "<"+this.nodeName;
                        for(var v in this.attributes)
                        {
                                traced_value+=" "+v+"=\""+this.attributes[v]+"\""
                        }
                       
                        if(this.firstChild==null)
                        {
                                traced_value+=" />"
                        }else{
                                if(this.firstChild.nodeType==3 && this.firstChild == this.lastChild)
                                {
                                        traced_value+=">"+this.firstChild.toString()+"</"+this.nodeName+">";
                                }else{
                                        traced_value+=">\r\t"+tab+this.firstChild.toString(tab+"\t")+"\r"+tab+"</"+this.nodeName+">";
                                }
                        }
                }else{
                        traced_value = this.firstChild.toString("");
                }
               
        }else{
                traced_value=this.nodeValue;
        }
        if(this.nextSibling!=null)
        {
                traced_value+="\r"+tab+this.nextSibling.toString(tab);
        }
       
        return traced_value;
}

//-------------------------------------------------------------------------
//        Array
//-------------------------------------------------------------------------

Array.prototype.toString = function()
{
        return this.toXML("Array").toString();
}


Aib 12.11.2001 00:48

Спасибо большое, john
 
:) :) :)


Часовой пояс GMT +4, время: 11:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.