繁体   English   中英

弹性树属性,是否为空引用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM