Свойства дерева Flex, нулевая ссылка? - PullRequest
0 голосов
/ 02 февраля 2009

Я извлекаю большой XML-файл и не могу контролировать его структуру.

Я использовал пользовательскую функцию, чтобы использовать имя тега для просмотра древовидной структуры как гибкого дерева, но затем оно ломается. Я предполагаю, что это как-то связано с моей другой функцией, которая вызывает значения атрибута из выбранного узла.

См. Код.

</p> <pre><code><mx:Tree x="254" y="21" width="498" height="579" id="xmllisttree" labelFunction="namer" dataProvider="{treeData}" showRoot="false" change="treeChanged(event)" />

// и данные

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;
        }

Ошибка: ошибка типа: ошибка # 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект.

Где нулевая ссылка?

Ответы [ 3 ]

1 голос
/ 05 февраля 2009

OK. Похоже, ваш XML выглядит примерно так:

<root>
  <test>
    <child>leaf 1</child>
  </test>
  <test2>
    <child2>leaf 2</child2>
  </test2>
</root>

Важной частью этого является то, что внутри тегов child и child2 есть простой контент. Расширение дерева для отображения «лист 1» или «лист 2» вызывает ошибку, которую вы получаете, потому что node.name () вернет ноль. Это имеет смысл, потому что «лист 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» в качестве метки для соответствующих узлов в дереве.

0 голосов
/ 02 февраля 2009

По словам Флекса и парня, который ответил на мой другой вопрос (Херреман), называть localname как собственность - это правильный способ сделать что-то.

fullXML и эта строка строк являются артефактами. У меня есть XML, встроенный в тот же файл атм.

Сбой при возврате nodeName.localName при попытке нарисовать конечные узлы. Я знаю, что это как-то связано с:

return nodeName.localName;

и

public function treeChanged(event:Event):void {
selectedNode=Tree(event.target).selectedItem;
}
0 голосов
/ 02 февраля 2009

Вы пробовали отлаживать это в flex builder или eclipse?

Наиболее вероятным кандидатом на ошибку нулевой ссылки является аргумент 'item', передаваемый в namer (). Компонент дерева действительно передает строку методу labelFuntion, но это не может быть строка, которую можно преобразовать в объект xml. Я бы определенно проверил это первым.

Другая вещь, которую я вижу, неверна, это то, что вы обращаетесь к localName, как будто это свойство. На самом деле это метод, поэтому вы должны вызывать его по nodeName.localName (). Редактировать ... теперь это неверно, так как я не знал, что имя узла было типа QName. localName на самом деле является свойством этого типа. * 1006 извинения *

Изменить: также ваш компонент дерева имеет dataProvider

dataProvider="{treeData}"

Из приведенного вами примера не похоже, что treeData существует. Это должно быть fullXML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...