Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Функция прародителя 1061: Call to a possibly undefined method pr through a reference (http://www.flasher.ru/forum/showthread.php?t=131131)

Random SunFire 13.10.2009 18:00

Функция прародителя 1061: Call to a possibly undefined method pr through a reference
 
Пытаюсь перейти с 2 на 3...
Вопрос вот в чем

Вот главный класс
Код AS3:

package gallery{
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.filters.*;
        public class Creator extends Sprite {
                private var loader:Loader;
                private var xmlList:XML;
                private var fotoObj:Array=new Array();
                private var divIcons:Sprite=new Sprite();
                private var divFObject:FotoFullObject;
                private var urlLoader:URLLoader=new URLLoader();
                public function Creator() {
                        // Формируем фон
                        //формируем контейнер для иконок
                        this.divIcons.x=15;
                        this.divIcons.y=15;
                        addChild(this.divIcons);
                        // Читаем хмл
                        var urlRequest:URLRequest = new URLRequest("images.xml");
                        this.urlLoader.addEventListener(Event.COMPLETE,completeXML);
                        this.urlLoader.load(urlRequest);
                }
                private function completeXML(e:Event):void {
                        this.xmlList=new XML(urlLoader.data);
                        var ii:int=0;
                        var obj:FotoObject;
                        for each (var foto:XML in this.xmlList.*) {
                                obj=new FotoObject(foto.ICON,foto.FULLSIZE,foto.COMMENT);
                                this.fotoObj.push(obj);
                                this.fotoObj[this.fotoObj.length-1].y=100*(ii++);
                                this.divIcons.addChild(obj);
                                obj.addEventListener(MouseEvent.CLICK,this.pr);
                        }
                }
                public function pr():void {
                        trace(1111111);
                }
                        }
}

Вот дополнительный в том же пакете.
Код AS3:

package gallery{
        import flash.display.*;
        import flash.filters.*;
        import flash.events.*;
        import flash.net.*;
        import fl.transitions.*;
        import fl.transitions.easing.*;
        internal class FotoObject extends Sprite {
                private var loader:Loader;
                public function FotoObject(urlIcon:String,urlFullSize:String,comment:String) {
                        var request:URLRequest = new URLRequest(urlIcon);
                        loader=new Loader();
                        configureListeners(loader.contentLoaderInfo);
                        loader.load(request);
                }
                private function configureListeners(dispatcher:IEventDispatcher):void {
                        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
                }
                private function completeHandler(event:Event):void {
                        this.parent.parent.pr();
                }
 
}

Пытаюсь запустить функцию предка this.parent.parent.pr(); - болт. Почему? На функции стоит public.
1061: Call to a possibly undefined method pr through a reference with static type flash.display:DisplayObjectContainer.
Собственно идя была в том, что есть куча картинок, по ним кликаешь и мышкой и приемником события должна быть эта сама функция - единого "прародителя"... Что я делаю не так?

Gal4enochek 13.10.2009 18:12

this.parent.parent нужно привести к Creator
Код AS3:

(this.parent.parent as Creator).pr()

parent - имеет тип flash.display.DisplayObjectContainer, а у него вашего метода pr нет. Надо компилятору явно указать, что ваш парент к классу Creator относится.

Волгоградец 13.10.2009 18:13

Для начала попробуй привести родителя к нужному типу:
Код AS3:

(parent.parent as Creator).pr()

А вообще чтобы такие иерархии не выстраивать нужно передать ссылку на родителя.

upd.: опоздал...

Random SunFire 13.10.2009 18:30

Вах! Спасибо айболиту! За-ра-бо-тало! Насчет ссылки согласен.

А есть еще ссылки на родителя, что б сразу с нужным типом? В смысле, типа свойства типа парента

Gal4enochek 13.10.2009 18:50

Стандартных нет. Можете для своего класса сами создать.
Код AS3:

// ------------------- В классе FotoObject
private var custom_parent : Creator;
 
public function FotoObject(urlIcon:String,urlFullSize:String,comment:String, pr:Creator){
  /// ....
  custom_parent = pr;
}
 
///....
private function completeHandler(event:Event):void {
        this.custom_parent.pr();
}
 
// ---------------------------  в классе Creator
obj=new FotoObject(foto.ICON,foto.FULLSIZE,foto.COMMENT, this);



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

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