クラス定義を動的に登録しようとしているので、後で正しい名前空間で正しいクラスを取得するためにXML文書を解析できます。私はこれをすることができます:SchemaTypeRegistryとSchemaManagerを使用して接頭辞とノード名からクラス定義を取得する方法は?
var classObject:Object = typeRegistry.getClassDefinition("s:WindowedApplication");
私はそれを持っていません。ここに私がいるところがある。私はSchemaTypeRegistryを使用して、インスタンスまたは修飾クラス名の文字列を使用してタイプを登録することができるよ:
typeRegistry = SchemaTypeRegistry.getInstance();
var windowedApplicationQName:QName = new QName(MXMLDocumentConstants.sparkNamespaceURI, "WindowedApplication");
//typeRegistry.registerClass(windowedApplicationQName, WindowedApplication);
typeRegistry.registerClass(windowedApplicationQName, "spark.components::WindowedApplication");
私は、クラスを取得し、簡単に十分な、それのインスタンスを作成することができます。
var className:Object = typeRegistry.getClass(windowedApplicationQName);
var classInstance:Object;
classInstance = new className();
しかし、その後なぜなら、私はXMLテキストエディタに入っていて、XMLノード名を得ることができます。この場合、値は "s:WindowedApplication"です。
だから今、私は知ら名前空間URIの登録しようとしていると私は(マニュアルに記載されていないQualifiedResourceManagerを拡張)SchemaManagerであることをやっているとき:私はQNameのを得ることができるので、
schemaManager = new SchemaManager();
schemaManager.addNamespaces({s:MXMLDocumentConstants.sparkNamespace});
var qname:QName = schemaManager.getQNameForPrefixedName("s:WindowedApplication");
これは素晴らしいですオブジェクトとその後、私はそうのようなタイプレジストリを使用して、それを検索することができます。
qname = schemaManager.getQNameForPrefixedName("s:WindowedApplication");
var classObject:Object = typeRegistry.getClass(qname);
しかし、私はこれで問題が発生しました。 "のWindowedApplication" は "S:のWindowedApplication" 対、接頭辞は、 "S" がschemaManagerに登録されていないか、接頭辞がない場合
:
問題1、schemaManagerでエラーが発生します。これは、スキーマが期待されているためですが、データ型は動的なので、データ型は動的ではありません。
問題2:
SchemaTypeRegistryは、名前空間接頭辞の知識がないとSchemaManagerは、それが保持している名前空間のクラス定義の知識を持ちません。これは私に欠けている作品があると信じさせる。
私は壊れやすい、接続されていないシステムを装っているので、クラス定義とその名前空間と接頭辞を格納する正式な、またはより良い方法がありますか?
更新:
私はどちらかの拡張クラスと名前空間と名前空間接頭辞を持つクラス定義を接続するためのいずれかのクラスからのコードを追加することができます何もない場合。しかし、再び、欠けている作品があるようです。