PDA

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


Thanx7
11.12.2007, 20:44
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
Приватные переменные лучше называть с подчеркиванием в начале.

Thanx7
14.12.2007, 11:52
Спасибо, попробую ввести в свою практику такой стиль.

private var _link:String;