0

Flex の FileReference クラスを拡張して、カスタム プロパティを含めたいと考えています。AS3 では、イベント リスナーを介して関数に引数を渡すことができないため、これを行いたいと思っています。これは悲しいことです。そのため、このプロパティがイベント ターゲットに存在し、アクセスできるようにする必要があります。

また、既存の FileReference オブジェクトをこのクラスに簡単にキャストできるようにしたいと考えています。私は持っている:

var fr:SmxFR = e.target as SmxFR

そして、それが機能することを望みます。今はnullを返すだけです。

新しくインスタンス化された空白のSmxFRオブジェクトには拡張プロパティが配置されていますが、継承されたすべてのプロパティとオブジェクトが返されます。Error: Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.

これは私が使用しているクラスですSmxFR.as:

package
{
import flash.net.FileReference;

public class SmxFR extends FileReference
{
    public var housenum:String = "";
    public function SmxFR()
    {
        super();
    }       
}
}

本当に、できる限り簡単に保ちました。誰かがこれを理解するのを手伝ってくれますか? ありがとう。


編集:

リクエストごとに、これはすべての継承されたオブジェクトで前述のエラーを引き起こすインスタンス化です:

var fr:SmxFR = new SmxFR();

そこから生きたハンドル プロパティを取得し、他のすべての (つまり、継承された) プロパティは をスローしError #2037ます。


だから、多分私がやりたいことはオーバーライドが必要になるFileReferenceListでしょうか?元のオブジェクトを にインスタンス化する必要がある場合は、SxmFRFRL を使用してユーザーが一度に複数のファイルを選択できるようにする必要があるためです。FileReferenceクラスから断食する方法はないのですか?

4

3 に答える 3

2

イベントリスナーを介してオブジェクトを完全に渡すことができます。これは、特定の方法で行われるだけです。小さな間違いを犯した場合に後で問題を引き起こす可能性があるコアライブラリを拡張しようとするのではなく、正しく行うことを学びます。

私の解決策: FileReference を拡張する代わりに、 Event を拡張し、それにプロパティを追加します。

var myEvent:MyExtendedEvent = new MyExtendedEvent();
myEvent.myCustomProperty = myValue;
dispatchEvent(myEvent);

次に、ハンドラーで次のように記述します。

function myEventHandler(e:MyExtendedEvent):void {
     trace(e.myCustomProperty);
}

この道を行くのははるかに苦痛ではありません!追加の利点は、他の Flash 開発者がどこかであなたのコードを見たとしても、非標準のカスタマイズされた FileReference に直面することはないということです。:)

于 2009-11-12T22:20:12.940 に答える
0

延長FileReferenceListは役に立ちません。FileReferenceList.browse()メソッドは、ユーザーが複数のファイルを選択したときにオブジェクトの配列を作成しFileReferenceます。これは内部的に発生し (プライベート メソッドである可能性があります)、その動作を変更して、代わりに SxmFR オブジェクトを作成するように強制することはできません。Myk が提案したように、カスタム イベントを使用します。


この記事ではサウンド オブジェクトについて説明しますが、オブジェクトにも当てはまる可能性がありFileReferenceます。再利用できない場合があります。SmxFrクラスを使用するコードを投稿すると、上記のエラーが発生します。

于 2009-11-12T16:50:28.173 に答える
0

e.target が FileReference としてインスタンス化されている場合、継承の行にないため、SmxFR にキャストできません。別の方法では、SmxFR オブジェクトを FileRefernce にすることができます。

于 2009-11-12T17:02:15.987 に答える