PDA

Просмотр полной версии : HTTPService - e4x - Как правильно за-Bind-ить?


CEBEP
05.05.2009, 18:10
Есть XML:


<pro>
<info id="aaa">
AAAAA
</info>
<info id="bbb">
BBBBB
</info>
<info id="ccc">
CCCCC
</info>
</pro>


И MXML:

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

<mx:HTTPService url="info.xml" id="htSer" resultFormat="e4x" />

<mx:List dataProvider="{htSer.lastResult.info}" width="373">
<mx:itemRenderer>
<mx:Component>
<mx:Text text="{data.@id}" />
</mx:Component>
</mx:itemRenderer>
</mx:List>
</mx:Application>


Работает но выдаёт ошибку:
warning: unable to bind to property 'id' on class 'XML' (class is not an IEventDispatcher)

Как правильно биндить в таком случае? Пробывал и XMLListCollection, но таже ошибка :wacko:

RetKiller
05.05.2009, 19:05
Точно такая же проблема :) Я просто внимания не обращаю,если честно. Но все равно интересно,как делать по уму ;)

wvxvw
05.05.2009, 21:04
Ой, не посмотрел сначала.
override public function set data(value:Object):void
{
myText.text = (value as XML).@id;
}

CEBEP
06.05.2009, 14:22
wvxvw, можно подробнее, как это в мой пример воткнуть, а то ничего не понял :(

fljot
06.05.2009, 14:52
<mx:Text text="{data.attribute('id')}" />

так warning не выдаёт.. по крайней мере по этому поводу) но ругается на htSer.lastResult.info

CEBEP
06.05.2009, 15:11
Да не, это тоже самое. Тут советуют юзать ArrayCollection, т.к. он поддерживает live update данных, что мне в принципе не нужно, но всё равно интересно.
Проблема в юзании ArrayCollection-а, что теряются Text узлы при переводе в Object.

wvxvw
06.05.2009, 15:59
wvxvw, можно подробнее, как это в мой пример воткнуть, а то ничего не понял :(

Это вставить в рендерер -
<mx:Scrip>
<![CDATA[
сюда
]]>
<mx:Script>

@fljot:
Там проблема не в том, что данные в виде XML, а в том, что свойство data не IEventDispatcher :)

CEBEP
06.05.2009, 16:12
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="htSer.send()" >
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
myText.text = (value as XML).@id;
}
]]>
</mx:Script>

<mx:HTTPService url="info.xml" id="htSer" resultFormat="e4x" />

<mx:List dataProvider="{htSer.lastResult.info as XMLList}" width="373">
<mx:itemRenderer>
<mx:Component>
<mx:Text id="myText" text="{data.@id}" />
</mx:Component>
</mx:itemRenderer>
</mx:List>
</mx:Application>



myText.text = (value as XML).@id; <---- Обращение к несуществующему свойству "myText" .

Во я о чём :rolleyes:

wvxvw
06.05.2009, 16:41
Это вставить в рендерер
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="htSer.send()"
>
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
private function resultHandler(event:ResultEvent):void
{
trace(event.result);
trace(htSer.lastResult.children());
}
]]>
</mx:Script>
<mx:HTTPService
url="info.xml"
id="htSer"
resultFormat="e4x"
result="resultHandler(event)"
/>

<mx:List
dataProvider="{htSer.lastResult.children()}"
width="373"
>
<mx:itemRenderer>
<mx:Component>
<mx:Text>
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
text = (value as XML).@id;
}
]]>
</mx:Script>
</mx:Text>
</mx:Component>
</mx:itemRenderer>
</mx:List>
</mx:Application>

CEBEP
06.05.2009, 16:54
Упс, не прочёл пр рендерер, но хм.. всё равно вылазиит:

warning: unable to bind to property 'info' on class 'XML' (class is not an IEventDispatcher)

wvxvw
06.05.2009, 16:57
Сори, я прямо на месте правил, было пару ошибок, попробуй еще раз.

CEBEP
06.05.2009, 17:11
О, благодарствую! Теперь разобрался :)