[英]Flex Tree Properties, Null Reference?
我正在拉大XML文件,但无法控制它的结构。
我使用了一个自定义函数来使用标签名称将树结构视为弹性树,但随后它断裂了。 我猜想它与我的其他函数有关,该函数从选定的节点调用属性值。
参见代码。
<mx:Tree x="254" y="21" width="498" height="579" id="xmllisttree" labelFunction="namer" dataProvider="{treeData}" showRoot="false" change="treeChanged(event)" /> //and the Cdata import mx.rpc.events.ResultEvent; [Bindable] private var fullXML:XMLList; private function contentHandler(evt:ResultEvent):void{ fullXML = evt.result.page; } [Bindable] public var selectedNode:Object; public function treeChanged(event:Event):void { selectedNode=Tree(event.target).selectedItem; } public function namer(item:Object):String { var node:XML = XML(item); var nodeName:QName = node.name(); var stringtest:String ="bunny"; return nodeName.localName; }
<mx:Tree x="254" y="21" width="498" height="579" id="xmllisttree" labelFunction="namer" dataProvider="{treeData}" showRoot="false" change="treeChanged(event)" />
//and the Cdata import mx.rpc.events.ResultEvent; [Bindable] private var fullXML:XMLList; private function contentHandler(evt:ResultEvent):void{ fullXML = evt.result.page; } [Bindable] public var selectedNode:Object; public function treeChanged(event:Event):void { selectedNode=Tree(event.target).selectedItem; } public function namer(item:Object):String { var node:XML = XML(item); var nodeName:QName = node.name(); var stringtest:String ="bunny"; return nodeName.localName; }
<mx:Tree x="254" y="21" width="498" height="579" id="xmllisttree" labelFunction="namer" dataProvider="{treeData}" showRoot="false" change="treeChanged(event)" />
//and the Cdata import mx.rpc.events.ResultEvent; [Bindable] private var fullXML:XMLList; private function contentHandler(evt:ResultEvent):void{ fullXML = evt.result.page; } [Bindable] public var selectedNode:Object; public function treeChanged(event:Event):void { selectedNode=Tree(event.target).selectedItem; } public function namer(item:Object):String { var node:XML = XML(item); var nodeName:QName = node.name(); var stringtest:String ="bunny"; return nodeName.localName; }
错误为TypeError:错误#1009:无法访问空对象引用的属性或方法。
空引用在哪里?
好。 听起来您的XML看起来像这样:
<root>
<test>
<child>leaf 1</child>
</test>
<test2>
<child2>leaf 2</child2>
</test2>
</root>
重要的是,child和child2标记内包含简单的内容。 展开树以显示“叶子1”或“叶子2”会导致您收到错误,因为node.name()将返回null。 这是有道理的,因为“叶子1”和“叶子2”是文本节点,没有节点名称。
若要更正此问题,可以按照以下方式将namer函数更新为:
public function namer(item:Object):String {
var node:XML = XML(item);
var nodeName:QName = node.name();
if (nodeName) {
return nodeName.localName;
} else {
return String(node);
}
}
这将使用“叶子1”和“叶子2”作为树中相应节点的标签。
您是否尝试过在Flex Builder或Eclipse中调试它?
空引用错误最有可能的候选者是传递给namer()的'item'参数。 树组件确实将字符串传递给labelFuntion方法,但它可能不是可以转换为xml对象的字符串。 我肯定会先检查一下。
我看到的另一件事是错误的,因为您正在访问localName就像它是一个属性一样。 它实际上是方法,因此您应该通过nodeName.localName()来调用它。 编辑...这是不正确的,因为我没有意识到nodeName是QName类型。 localName实际上是这种类型的属性。 应用学
编辑:您的树组件也有一个dataProvider
dataProvider="{treeData}"
从给出的示例中,它似乎不存在treeData。 那应该是fullXML吗?
根据Flex和回答我另一个问题的人(Herreman)的说法(Herreman),将localname作为属性是正确的做法。
fullXML和该字符串测试线是工件。 我将XML嵌入在同一文件atm中。
尝试绘制叶节点时,它在返回nodeName.localName时失败。 所以我知道这与以下方面有关:
return nodeName.localName;
和
public function treeChanged(event:Event):void {
selectedNode=Tree(event.target).selectedItem;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.