PDA

Просмотр полной версии : Tree.dataPrivider и XML


Azy
07.02.2007, 15:49
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ed="ed.*" creationComplete="initEditor()">
<mx:Script>
<![CDATA[
public function initEditor():void
{
var scriptUrl:String = "http://192.168.0.6/index.php";
tree.setUrl(scriptUrl);
tree.loadData();
}
]]>
</mx:Script>

<mx:Panel title="Редактор прайс-листов" height="100%" width="100%" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
<mx:HBox width="100%" height="100%">
<mx:VBox width="25%" height="100%">
<ed:eTree id="tree" width="100%" height="100">

</ed:eTree>
</mx:VBox>
<mx:VBox width="75%" height="100%">
<mx:DataGrid width="100%" height="100%">

</mx:DataGrid>
</mx:VBox>
</mx:HBox>
</mx:Panel>
</mx:Application>
и
// ActionScript file
package ed
{
import mx.controls.Tree;
import flash.events.Event;
import flash.net.URLRequest;
import flash.net.URLLoader;

public class eTree extends Tree
{
public var url:String;
public var myLoader:URLLoader
public var xml:XML;

public function eTree()
{
super();
}

public function setUrl(newUrl:String):void
{
this.url = newUrl;
}

public function loadData():void
{
xml = new XML();

var myXMLURL:URLRequest = new URLRequest(url+"?do=getXMLTree");
myLoader = new URLLoader(myXMLURL);

myLoader.addEventListener("complete", xmlLoaded);
}

public function xmlLoaded(evtObj:Event):void
{
//trace(xml.);
this.dataProvider = myLoader.data;
}
}
}

При установке this.dataProvider = myLoader.data; вместо дерева в компоненте появляется xml, который получаю с сервера. Где ошибка?
PS получаемый XML:
<?xml version="1.0" encoding="utf-8"?>
<nodes>
<node label="Производственное оборудование" path ="01" id="1">
<node label="Металлургическое оборудование" path ="0101" id="2">
<node label="asdfasd" path ="010101" id="294"/>
</node>
<node label="Металлообрабатывающее оборудование" path ="0102" id="3"/>
<node label="Нефтегазоперерабатывающее оборудование" path ="0103" id="4"/>
</node>
</nodes>

etc
07.02.2007, 16:29
Ну правильно, формат данных по дефолту — text.
См. свойство dataFormat у URLLoader.

И ещё — сервер выдает верный Content-Type, что это text/xml, а не text/plain?

Nirth
07.02.2007, 16:35
Загружай через HTTPService поставь формат e4x и не парься.

Если XML будет перегружатся или изменятся то сделай цепочку - HTTPService -> XML -> XMLListCollection, тогда при изменении XML, у тебя будет обновлятся автоматически (HTTPService и XMLListCollection байндятся).

Nirth
07.02.2007, 17:29
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="dataLoader.send()">

<mx:HTTPService url="data.xml" resultFormat="e4x"
id="dataLoader"/>

<mx:Tree labelField="@label"
showRoot="false">
<mx:XMLListCollection source="{dataLoader.lastResult.children()}"/>
</mx:Tree>
</mx:Application>

etc
07.02.2007, 17:37
Nirth, не MXML единым :)
Тем более, тут кастомный компонент.

Azy
07.02.2007, 17:37
__etc
вот-вот =)

хочу чтобы все динамически подгружалось. в смысле методами класса а не зависило от того что там в mxml-e написано

Проблема решена
добавил labelField="@label".

Nirth
07.02.2007, 17:39
Nirth, не MXML единым
Тем более, тут кастомный компонент.

Я пример написал, того как можно грузить с помощью HTTPService который сам переводит в нужный формат и парсит, и еще может ошибки пофиксить.

То на каком языке это напишет автор не играет никакой роли, мне просто быстрее MXML.