Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перешёл на ООП не могу понять в чём ошибка (http://www.flasher.ru/forum/showthread.php?t=206146)

grafillo! 15.01.2014 16:26

Перешёл на ООП не могу понять в чём ошибка
 
Не работает класс выдаёт кучу ошибок типо таких 1180: Call to a possibly undefined method URLRequest.
1120: Access of undefined property URLRequestMethod.

но я же объявил переменные requestmes и loader а он пишет что нет, что за фигня?

Код AS3:

package  {
        import flash.display.MovieClip;
        import flash.net.URLVariables;
 
 
        public class Move  {
                    public var  requestmes:URLRequest;
                    public var  loader:URLLoader ;
 
 
                public static  function sendData(vars:URLVariables,url:String) {
 
                        requestmes  = new URLRequest;
                        requestmes.url = url;
                        requestmes.method = URLRequestMethod.POST;
                        requestmes.data = vars;
 
                        loader= new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.TEXT;
                        loader.load(requestmes);
 
                        return loader.data;
 
                        }       
 
 
 
        }
 
}


Akopalipsis 15.01.2014 16:31

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

alexandrratush 15.01.2014 16:47

Вам нужно сделать импорт всех классов, которые вы используете
Код AS3:

import flash.net.URLRequest;
import flash.net.URLLoader;
...

перенесите переменные requestmes и loader в тело метода, и скажу наперед что нужно дождаться от loader событие COMPLETE, иначе вы получите пустой loader.data.

grafillo! 15.01.2014 18:40

ага всё разобрался, терь другая запара, не могу додуматься как сделать статический метод для получения данных
Код AS3:

package  {
        import flash.display.MovieClip;
        import flash.net.*;
        import flash.events.Event;
 
 
        public class Move extends MovieClip {
                    public static var  requestmes:URLRequest;
                        public static var  loader:URLLoader ;
                        public static var  resp:XML;
 
 
                public static  function sendData(vars:URLVariables,url:String) {
 
 
                        requestmes  = new URLRequest;
                        requestmes.url = url;
                        requestmes.method = URLRequestMethod.POST;
                        requestmes.data = vars;
 
                        loader= new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.TEXT;
                        loader.addEventListener(Event.COMPLETE, onLoad);
                        loader.load(requestmes);
 
                        function onLoad (e:Event){
                                resp = XML(e.target.data);
                                trace(resp);
                                }
 
                        return resp;
 
                        }       
 
 
 
        }
 
}

действительно, функция сенд дата не может мне вернуть resp потомучто он только появляется после загрузки, а я хочу сделать стат метод который бы загружал данные и возварщал результат, как это сделать кто подскажет?

Isfet 15.01.2014 18:44

передавать в параметрах функции sendData - функцию, в которую нужно передать ответ
как-то так
Код AS3:

public static  function sendData(vars:URLVariables,url:String,callBack:Function):void {
 
 
                        requestmes  = new URLRequest;
                        requestmes.url = url;
                        requestmes.method = URLRequestMethod.POST;
                        requestmes.data = vars;
 
                        loader= new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.TEXT;
                        loader.addEventListener(Event.COMPLETE, onLoad);
                        loader.load(requestmes);
 
                        function onLoad (e:Event){
                                resp = XML(e.target.data);
                                trace(resp);
                        callBack(resp);
                            }
 
 
 
                        }

вызывать откуда-то так

Код AS3:

sendData({},"url- строка",onDataLoad );
 
private function onDataLoad(dataXml:XML):void{
    trace(dataXml);
}


ZackMercury 15.01.2014 21:12

Функция в функции - это против правил и стандартов :) Как все говорят, это очень и очень нехорошо.

grafillo! 15.01.2014 21:53

хорошо, тогда как реализовать такой код без вложенных функций?

ZackMercury 15.01.2014 21:56

Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.net.*;
        import flash.events.Event;
 
 
        public class Move extends MovieClip
        {
                public static var requestmes:URLRequest;
                public static var loader:URLLoader;
                public static var resp:XML;
 
 
                public static function sendData(vars:URLVariables,url:String)
                {
 
 
                        requestmes = new URLRequest  ;
                        requestmes.url = url;
                        requestmes.method = URLRequestMethod.POST;
                        requestmes.data = vars;
 
                        loader= new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.TEXT;
                        loader.addEventListener(Event.COMPLETE, onLoad);
                        loader.load(requestmes);
 
                        return resp;
 
                }
 
 
                private static function onLoad(e:Event)
                {
                        resp = XML(e.target.data);
                        trace(resp);
                }
 
        }
 
}

Добавлено через 6 минут
Да, кстати, я так и не понял, зачем
Цитата:

class Move extends MovieClip

grafillo! 15.01.2014 22:30

экстендс мувиклип эт видать ненужно просто пробовал х)
ну и как в вашем примере вызывать эту функцию?
потомутчо return resp; - работать не будет

ZackMercury 15.01.2014 22:36

Цитата:

как вызывать эту функцию?
Я вам просто показал, как вытащить её из другой функции.
А всё остальное Isfet правильно сказал.
Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.net.*;
        import flash.events.Event;
 
 
        public class Move extends MovieClip
        {
                public static var requestmes:URLRequest;
                public static var loader:URLLoader;
                public static var resp:XML;
                private static var callBack:Function;
 
 
 
                public static function sendData(vars:URLVariables,url:String, responseFunction:Function)
                {
 
 
                        requestmes = new URLRequest  ;
                        requestmes.url = url;
                        requestmes.method = URLRequestMethod.POST;
                        requestmes.data = vars;
 
                        loader= new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.TEXT;
                        loader.addEventListener(Event.COMPLETE, onLoad);
                        loader.load(requestmes);
 
                        callBack = responseFunction;
 
                }
 
 
                private static function onLoad(e:Event)
                {
                        resp = XML(e.target.data);
                        trace(resp);
                        callBack(resp);
                }
 
        }
 
}

Добавлено через 36 минут
И ещё, я бы вам советовал придержаться правильного стиля написания, и все переменные обьявлять как private, а там где они действительно нужны снаружи класса, либо получать через гет-методы(getName, getValue), или через геттеры, ну или на крайняк уже открыть в internal/public.


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

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