Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 这是使用返回数据实现回调的有效方法吗?_Actionscript 3_Actionscript_Air - Fatal编程技术网

Actionscript 3 这是使用返回数据实现回调的有效方法吗?

Actionscript 3 这是使用返回数据实现回调的有效方法吗?,actionscript-3,actionscript,air,Actionscript 3,Actionscript,Air,我需要一个简单的实用程序类,可以处理加载一个AIR桌面项目的XML,并想知道这种方法是否有效,或者是否有更好的方法来做到这一点。下面的完整代码-示例使用的是文本而不是xml 此类使用以下参数从另一个对象接收请求: public function loadTextFile(filename:String, directory:File,

我需要一个简单的实用程序类,可以处理加载一个AIR桌面项目的XML,并想知道这种方法是否有效,或者是否有更好的方法来做到这一点。下面的完整代码-示例使用的是文本而不是xml

此类使用以下参数从另一个对象接收请求:

             public function loadTextFile(filename:String, 
                                         directory:File, 
                                              call:Function):void
完成任务后,该类将结果打包到对象实例中,并调用回调函数

              var obj:Object = getResultObject(true, "text", fileContents);
              callback(obj);
我特别想知道以这种方式使用对象在运行时设置属性是否有效/受支持

我需要它的原因与此无关,但这是因为我继承了一个项目,其中a.有20多个类,每个类都使用URLRequest以自己的方式加载XML,B.每个类都假设XML文件与应用程序目录相关

在我们开始之前:函数不同于函数。函数是编译函数的OO表示,函数可以使用其引用名直接调用,而函数不能。注意故意使用大写来表示两者之间的差异

如果您改变了处理函数对象的方式,那么您当前的实现将起作用。不能像调用使用function.apply方法所需的常规函数那样调用由function对象表示的函数


apply方法接受两个参数,第一个是要操作的对象,如果传递null,它将使用与函数关联的默认对象,第二个是要传递给根函数的参数数组。这就是标准EventDispatcher.addEventListener和callLater架构在幕后的工作方式

嘿-谢谢!我从一个类实例传入一个函数,所以我认为它是一个绑定方法,所以我调用它:callbackobj正在工作。我想你指的是传递函数字符串名,是吗?使用callback.applynull[obj];如果有多个类具有相同名称的函数,则为空目标,这不会导致冲突吗?或者,如果我传入一个带有回调函数名的对象ref,我的实用程序类将需要导入被调用方类以存储ref,或者我可以将其作为实例存储为“object”?哦,像这样打包对象类很酷吗?动态定义属性?它与我使用过的其他语言非常不同。除非它实际上是一个函数,否则回调将无法工作。似乎您将call的引用分配给callback,call是一个函数,需要apply方法。我遇到的大多数语言都允许您使用[…]创建包含内容的数组
         public function loadTextFile(filename:String, 
                                     directory:File, 
                                call:Function):void
        {   
            callback = call;
            var theFile:File = directory.resolvePath(filename);
            if (! theFile.exists){
                var obj:Object = getResultObject(false, "text");
                callback(obj);
            } else {

                var fileStreamObj:FileStream = new FileStream();
                fileStreamObj.openAsync(theFile,FileMode.READ);

                var fileStream:FileStream = new FileStream();
                fileStream.addEventListener( Event.COMPLETE, fileComplete );
                fileStream.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

                fileStream.openAsync( theFile, FileMode.READ );
            }
        }

        private function fileComplete( event : Event ):void
        {
            var fileStream:FileStream  = event.target as FileStream;
            fileStream.removeEventListener( Event.COMPLETE, fileComplete );
            fileStream.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            var fileContents:String = fileStream.readMultiByte( fileStream.bytesAvailable, ISO_CS );
            fileStream.close();
        }

        private function ioErrorHandler(event:IOErrorEvent):void 
        {   
            var fileStream:FileStream  = event.target as FileStream;
            fileStream.removeEventListener( Event.COMPLETE, fileComplete );
            fileStream.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            var obj:Object = getResultObject(false, "text");
            callback(obj);
        }

        private function getResultObject(result:Boolean, type:String, data:*= null):Object
        {
            var obj:Object = new Object;
            obj["result"] = result;

            switch(type) {
                case "text":
                    obj["text"] = data;
                    break;

                default:

                    break;
            }
                return obj;
        }
var callback:Function = call;
        var theFile:File = directory.resolvePath(filename);
        if (! theFile.exists){
            var obj:Object = getResultObject(false, "text");
            callback.apply(null,[obj]);
        }