Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Помогите опознать причину warning-га. (http://www.flasher.ru/forum/showthread.php?t=124951)

Macika 13.05.2009 14:26

Помогите опознать причину warning-га.
 
При дебаге получаю следующий ворнинг: warning: unable to bind to property 'name' on class 'Object' (class is not an IEventDispatcher).

Собственно программа работает, как и ожидается, но ворнинг меня смущает. В чём может быть его причина?

Участники процесса, я так подозреваю: List, кастомный рендер и дата провайдер.

Вот код:

Код AS3:

List
 
<mx:List width="100%" height="100%" id="lSystemList"
            itemRenderer="com.artica.renderers.StorageRenderer"
            dataProvider="{systemDataProvider}"/>

Код AS3:

Render
 
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
                horizontalAlign="center"
                    horizontalScrollPolicy="off"
                    verticalScrollPolicy="off"
                      paddingTop="4"
                      paddingBottom="4" width="100%" height="100%">
 
    <mx:HBox width="100%" verticalAlign="middle">
        <mx:Image source="/assets/a16.png"/>
        <mx:Label text="{data.name}"/>
    </mx:HBox>
 
</mx:VBox>

Манипуляции примерно следующие:
Код AS3:

for each (var sNod:XML in xml.system)
{
        systemDataProvider.addItem({name:sNod.name});
}

Что я такого ужасного сделал? :wacko:

wvxvw 13.05.2009 14:42

Код AS3:

<mx:Label text="{data.name}"/>

data не может диспатчить события, поэтому и забиндить к ней нельзя.

Macika 13.05.2009 14:45

Так я и не пытаюсь ничего диспатчить. Или я чего-то не понимаю? Как мне по-другому вытаскивать данные из моего дата провайдера?

wvxvw 13.05.2009 14:52

Binding это класс, в основе функциональности которого заложено то, что свойство, которое нужно забиндить является свойством объекта, который может диспатчить события. Свойство data является Object и поэтому диспатчить события не может. Если нужно привязаться к этому свойству, добавьте функцию, которая будет это свойство возвращать и привяжитесь к ней:
Код AS3:

<mx:Script>
<![CDATA[
private function getData():String
{
return this.data.name;
}
]]>
<mx:Script>
<mx:Label text="{getData()}"/>


Macika 13.05.2009 15:24

Ворнинг исчез, но вместе с ним и перестали выводиться данные:)
Непонятно.

wvxvw 13.05.2009 15:31

Ой :) поправил

Macika 13.05.2009 15:38

Собственно уже пробовал и так.
Пробовал старый вариант + getData().name.

Потрейсил, проблема в том, что сама data всегда null.

wvxvw 13.05.2009 16:10

А, ну так понятное дело тогда :)
Код AS3:

<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
myLabel.text = value.name;
}
]]>
<mx:Script>
<mx:Label id="myLabel"/>


Macika 13.05.2009 16:28

Это первый вариант, который я попробовал. Нарыл его в cookbook, но если я так делаю, я не могу ничего выбрать в листе:)

wvxvw 13.05.2009 16:56

А так:
Код AS3:

<mx:Script>
<![CDATA[
private var _labelText:String;
override public function set data(value:Object):void
{
_labelText = value.name;
}
override protected function childrenCreated():void
{
myLabel.text = _labelText;
super.childrenCreated();
}
]]>
<mx:Script>
<mx:Label id="myLabel"/>



Часовой пояс GMT +4, время: 11:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.