1

在 Flex 3 中如何通过浏览和上传选项上传照片?

在 Flex 4 中有一个选项,例如:

<net:FileReference id="fileReference"
                       select="fileReference_select(event);"
                       complete="fileReference_complete(event);" />

但是在 Flex 3 中没有<net>标签。

编辑:

这是我的按钮单击处理程序代码

protected function uploadProfileImage(event:MouseEvent):void
        {

            
            var fileRef:FileReference= new FileReference();
            browseButton.addEventListener(MouseEvent.CLICK, onButtonClick);
            
            function onButtonClick(e:MouseEvent):void {
                fileRef.browse([new FileFilter("Images", "*.jpg;*.gif;*.png")]);
                fileRef.addEventListener(Event.SELECT, onFileSelected);
                Alert.show("0")
            }
            
            function onFileSelected(e:Event):void {
                fileRef.addEventListener(Event.COMPLETE, onFileLoaded);
                //fileRef.load();
                Alert.show("1");
            }
            
            function onFileLoaded(e:Event):void {
                var loader:Loader = new Loader();
                loader.loadBytes(e.target.data);
                //addChild(loader);
                profileImage.data = loader.content;
                profileImage.width = loader.width;
                profileImage.height = loader.height;
                this.height = profileImage.height;
                this.width = profileImage.width;
                this.visible = true;
                Alert.show("2");

            }
4

1 回答 1

1

Flex 4 中也没有<net>标签。中的net部分<net:FileReference...是一个 xml 命名空间。在应用程序的 MXML 文件顶部定义了一堆。以下是基于 Flash 的 Flex 4 应用程序的示例:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

xmlns:s="library://ns.adobe.com/flex/spark"只是将所有 Spark 组件映射到s命名空间,它允许您在 MXML 中引用 Spark 组件,如 Button,如下所示:

<s:Button label="My Button"/>

对于 Spark,Adobe 提供了一个清单文件,该文件将完全限定的 Spark 包映射到熟悉的 MXML 名称(这个问题有一个此类文件的示例)。您还可以将 AS3 包名称映射到 xml 命名空间。

FileReferenceflash.net包中。net您可以通过将以下内容添加到 MXML 文件中的根标记来将该包绑定到命名空间:

xmlns:net="flash.net.*"

完成此操作后,您可以flash.net通过在 MXML 中为包中的类添加前缀“net”ala 来引用它们<net:FileReference...

当然,FileReference不会继承UIComponent,因此您将无法将其直接添加到您的应用程序中。所以这可能不是你的情况。

没有看到比您发布的更多内容,我怀疑FileReference您的问题是一个自定义组件,它的包绑定到netxmlns。

<net:FileReference...您可以发布包含标签的完整 MXML 文档吗?

编辑

使用您添加的代码,在您的脚本块中有这个:

var fileRef:FileReference = new FileReference();

function onButtonClick(e:MouseEvent):void {
    fileRef.browse([new FileFilter("Images", "*.jpg;*.gif;*.png")]);
    fileRef.addEventListener(Event.SELECT, onFileSelected);
    fileRef.addEventListener(Event.CANCEL, onFileCanceled);
}

function onFileSelected(e:Event):void {
    fileRef.removeEventListener(Event.SELECT, onFileSelected);
    fileRef.removeEventListener(Event.CANCEL, onFileCanceled);

    fileRef.addEventListener(Event.COMPLETE, onFileLoaded);
    fileRef.load();
}

function onFileCanceled(e:Event):void {
    fileRef.removeEventListener(Event.SELECT, onFileSelected);
    fileRef.removeEventListener(Event.CANCEL, onFileCanceled);
}

function onFileLoaded(e:Event):void {
    fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
    var loader:Loader = new Loader();
    loader.loadBytes(e.target.data);
    profileImage.data = loader.content;
    profileImage.width = loader.width;
    profileImage.height = loader.height;
    profileImage.visible = true;
}

然后在你的 MXML 中有类似的东西:

<mx:Button
    label="Click to Load Profile Image"
    click="onButtonClick(event)"/>

<mx:Image
    id="profileImage"
    visible="false"/>

编辑 2

load()如果您在调用时遇到问题,FileReference请确保您的目标是正确的 Flash Player。这个答案解释了如何在 Flash Builder 中做到这一点。IIRC,Flex 3 项目默认以 Flash Player 9 为目标。

于 2013-01-22T04:49:15.100 回答