0

私は自分のプログラムで非常に奇妙な振る舞いをしており、多くのことを試し、考えられる答えをここで探した後、成功しなかったので、ここで新しい質問をすることにしました。だからここに私の問題があります:

私はdescribeType()を使用しているので、クラスを記述するE4XXMLオブジェクトを取得しました。私のクラスには、引数のないメタデータ[テーブル]があります。

[Table]
class MyClass extends ORM
{
    [...]

デバッグ時のXMLオブジェクトは正しいです:

trace(xmlDescription.metadata.@name[0]);
// output "Table"
trace(xmlDescription.metadata.(@name == "Table").length());
// output... 0!!!!

また、XMLオブジェクトを確認すると、必要なノードで正しい構造が得られました。

<metadata name="Table"/>

調査をしている間、XML.ignoreWhitespace属性について思い出しました。describeType()を呼び出す前にfalseに設定しようとしましたが、何も変更されませんでした

したがって、論理的に使用する必要があるXML型変数でこのメタデータノードを取得する方法についてのアイデアはあります(ただし、結果としてnullを取得しています)。

xmlDescription.metadata.(@name == "Table")[0]

???

前もって感謝します

PS:FlashBuilder4.6を使用しています

4

1 に答える 1

0

うわー、Facebookで質問を共有した後、そこからの回答をまったく期待していなかったので、私は古い同僚から1つ働いてもらいました。

どうやらFlashBuilder4に現れたバグがあり、私の問題はその範囲にあります。それを「修正」するには、String型のローカル変数を使用して機能させる必要があります。したがって、以下のようにコードを置き換えると、機能します。

// before:
public function uniqueMetadata( metadataName : String ) : ReflectionMetadata
{
    var x : XML = xmlDescription.metadata.(@name == metadataName)[0];
    // x is null here

// after
public function uniqueMetadata( metadataName : String ) : ReflectionMetadata
{
    var s : String = metadataName,
        x : XML = xmlDescription.metadata.(@name == s)[0];
    // x is not null and contain the desired node!

そうです、奇妙な奇妙な回避策です。私はそのようなバグがどのように起こり得るのかを真剣に理解していません...

とにかく、今は機能していて、E4Xフィルタリングを実行する前に、同じタイプのローカル変数の引数の値をコピーする必要があるコード内の他の場所を探していますlol

于 2012-08-17T00:50:58.897 に答える