我的程序中有一种非常奇怪的行为,在尝试了很多东西并在这里搜索可能的答案但没有成功之后,我决定在这里问一个新的问题。 所以这是我的问题:
我正在使用describeType(),因此得到了一个描述我的类的E4X XML对象。我的类有一个没有参数的元数据[表]:
[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:我正在使用Flash Builder 4.6
答案 0 :(得分:0)
显然Flash Builder 4中出现了一个错误,我的问题在于它的范围。要“修复”它,你必须使用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过滤之前复制相同类型的局部变量中的参数值