Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как переданный String конструктору увидеть в слушателе? (http://www.flasher.ru/forum/showthread.php?t=105273)

Thanx7 11.12.2007 20:44

Как переданный String конструктору увидеть в слушателе?
 
Код:

package
{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.net.navigateToURL;
        import flash.net.URLRequest;

        public class UrlButton extends Sprite
        {

                public function UrlButton (my_x:Number, my_y:Number, w:Number, h:Number, s:String):void
                {
                        this.graphics.beginFill (0x00ff00);
                        this.graphics.moveTo (my_x,my_y);
                        this.graphics.lineTo (my_x + w,my_y);
                        this.graphics.lineTo (my_x + w,my_y + h);
                        this.graphics.lineTo (my_x,my_y + h);
                        this.graphics.lineTo (my_x,my_y);
                        this.graphics.endFill ();
                        this.alpha = 0;
                       
                        this.addEventListener (MouseEvent.MOUSE_UP, myUrlButtonMouseUpHandler);
                }
               
                function myUrlButtonMouseUpHandler (event:MouseEvent):void
                {
                        var url:URLRequest = new URLRequest(s);                       
                        navigateToURL (url, "_self");
                }
        }
}

Этот код неправильный. Из-за второго красного s. Но как в слушателе увидеть переданный String?

etc 11.12.2007 22:43

Вы знаете, что такое свойства (поля) класса?

Thanx7 11.12.2007 22:46

Нет, ещё не практиковал. Спасибо, буду разбираться.

etc 11.12.2007 22:51

Ну вот разберитесь, очень помогает.

Thanx7 12.12.2007 13:30

Разобрался. Спасибо, что указали, где искать решение.

В коде класса (Этот класс называется подклассом?), передающего стринг, добавил строчку, выделенную красным:

Код:

var my_url:UrlButton = new UrlButton(580, 0, 720, 250);
my_url.link = "http://site.ru/";

И даже сделал трассировку:

Код:

trace("classProperty" in my_url);
trace("link" in my_url);

Возвращающую результат:

Код:

false
true

В коде класса (Этот класс называется суперклассом?), принимающего стринг, добавил строчку, выделенную красным:

Код:

public class UrlButton extends Sprite
{
                public var link:String;
               
        public function UrlButton (my_x:Number, my_y:Number, w:Number, h:Number):void
        {


etc 12.12.2007 13:35

Подклассы и суперклассы — совсем иные вещи.

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

Thanx7 12.12.2007 15:24

Свойство, да, сделал приватным.

А как это в конструктор? Как может функция класса UrlButton:

Код:

                function myUrlButtonMouseUpHandler (event:MouseEvent):void
                {
                        var url:URLRequest = new URLRequest(link);                       
                        navigateToURL (url, "_self");
                }

увидеть то, что хотя и передано в конструктор, но отсутствует здесь (красное многоточие):

Код:

        public class UrlButton extends Sprite
        {
                ... //private var link:String;
               
                public function UrlButton (my_x:Number, my_y:Number, w:Number, h:Number):void
                {

Разве достаточно описать переменную в функции конструктора, а не на уровне класса, и её увидят все другие функции класса?

etc 12.12.2007 15:28

Добавить новый параметр url в функции конструктора и присваивать значение свойству в самой функции конструктора, а не извне.

Thanx7 12.12.2007 16:11

Получилось. Спасибо:

Код:

public class UrlButton extends Sprite
{
        private var link:String;
               
        public function UrlButton (my_x:Number, my_y:Number, w:Number, h:Number, url:String):void
        {
                this.link = url;


etc 12.12.2007 19:12

Приватные переменные лучше называть с подчеркиванием в начале.


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

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