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

<net>Flex 4 にもタグはありません。の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 で Button などの Spark コンポーネントを参照できます。

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

Spark の場合、Adobe は、完全修飾された Spark パッケージを使い慣れた MXML 名にマップするマニフェスト ファイルを提供しています (この質問には、そのようなファイルの例があります)。AS3 パッケージ名を xml 名前空間にマップすることもできます。

FileReferenceflash.netパッケージに含まれています。netMXML ファイルのルート タグに以下を追加することで、そのパッケージを名前空間にバインドできます。

xmlns:net="flash.net.*"

flash.netこれを行うと、「net」 ala をプレフィックスとして付けることで、MXMLのパッケージ内のクラスを参照できます<net:FileReference...

もちろん、FileReferenceは継承UIComponentされないため、アプリケーションに直接追加することはできません。したがって、それはおそらくあなたの場合に起こっていることではありません。

あなたが投稿したもの以上のものを見ることなく、あなたの質問はxmlnsFileReferenceにバインドされたパッケージを持つカスタムコンポーネントであると思われます。net

<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 に答える