簡體   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