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