itemRenderer приводит к неопределенному методу

У меня есть файл mxml с кучей функций в теге script и компонент List, который использует пользовательский itemRender для добавления изображения в каждую запись списка. Но когда я добавляю вызов функции при нажатии на изображение, я получаю сообщение об ошибке «вызов неопределенного метода». Хотя моя функция находится прямо на той же странице... вот как она выглядит:

<mx:List x="10" y="38" width="358" height="231" id="audioPlaylist" change="playSong(event)" alternatingItemColors="[#7DC1F0, #4DAEF1]" color="#000000" labelField="title" fontSize="10" themeColor="#FFFFFF">
    <mx:itemRenderer>
        <mx:Component>
            <mx:HBox width="100%" height="20" horizontalAlign="left">
                <mx:HBox width="100%" height="100%" horizontalAlign="left">
                    <mx:Text text="{data.title}"/>
                </mx:HBox>
                <mx:HBox width="100%" height="100%" horizontalAlign="right">
                    <mx:Image id="iTunesButton" source="@Embed(source='assets/iTunes.png')" toolTip="Click to buy this song on iTunes"  click="iTunesLink(data.buyLink)"/>
                </mx:HBox>                           
            </mx:HBox>
        </mx:Component>
    </mx:itemRenderer>                                               
    </mx:List>

Функция iTunesLink() находится прямо на странице вместе с кучей других функций, которые вызываются без проблем, но почему она возвращает значение undefined?


person Martholomew    schedule 08.05.2009    source источник


Ответы (2)


Попробуйте externalDocument.iTunesLink(data.buyLink)

person Tony    schedule 08.05.2009

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

Лучший способ справиться с этим — всплывающие события. Создайте пользовательское событие, задайте для пузырьков значение true и отправьте его из своего компонента. Затем в файле, содержащем список, прослушайте это событие (в содержащем классе!) - (вам нужно будет сделать это в сценарии действий, если вы не хотите расширить список и добавить [Event(name="myCustomEvent",type ="me.MyEvent")] в расширение). Затем вы можете вызвать свою функцию.

Обычно я определяю визуализаторы элементов в отдельных файлах... Так проще понять, что происходит.

person Sean Clark Hess    schedule 13.05.2009