Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Баг UILoader и ScrollPane (http://www.flasher.ru/forum/showthread.php?t=115458)

s8000_1 30.08.2008 22:54

Баг UILoader и ScrollPane
 
В данном примере не срабатывает update(), есть ли какой-нибудь выход из этой ситуации?
Код:

import fl.containers.ScrollPane;
import fl.containers.UILoader;
import fl.events.ComponentEvent;

var sp:ScrollPane = new ScrollPane();
sp.x = 10;
sp.y = 30;
sp.width = 100;
sp.height = 100;
var ldr:UILoader = new UILoader();
ldr.scaleContent = false;
ldr.addEventListener(ComponentEvent.RESIZE, function(e:ComponentEvent):void { trace ("abc"); sp.update() } );
ldr.width = ldr.height = 10;
sp.source = ldr;
ldr.source = "http://************/uploads/080828/M5j5G6z2fl.jpg";       
addChild(sp);


ramshteks 30.08.2008 23:16

ты ваще в курсе что у тя там ошибка
Код:

1046: Type was not found or was not a compile-time constant: ComponentEvent.

s8000_1 30.08.2008 23:19

ramshteks, добавьте в classpath в настройках puclish:
Код:

$(AppConfig)/Component Source/ActionScript 3.0/User Interface
+ надо в библиотеку добавить скины ScrollPane и UILoader.

ramshteks 30.08.2008 23:29

Код:

import fl.containers.ScrollPane;
import fl.containers.UILoader;
import fl.events.ComponentEvent;

var sp:ScrollPane = new ScrollPane();
sp.x = 10;
sp.y = 30;
sp.width = 100;
sp.height = 100;
var ldr:UILoader = new UILoader();
ldr.scaleContent = false;
sp.addEventListener(ComponentEvent.RESIZE, OnResize);
ldr.width = ldr.height = 10;
sp.source = ldr;
ldr.source = "http://************/uploads/080828/M5j5G6z2fl.jpg";       
sp.addChild(ldr);
addChild(sp);

function OnResize(e:*):void {
        trace("abc");
        sp.update();
}

вот так он апдейтится но что то там еще ошибка я ваще не в курсах можжет разберетесь

s8000_1 30.08.2008 23:40

Цитата:

Сообщение от ramshteks (Сообщение 761333)
вот так он апдейтится но что то там еще ошибка я ваще не в курсах можжет разберетесь

Ничего не апдейтится. update=появление полосы прокрутки. Полос прокрутки не появляется.

ramshteks 30.08.2008 23:49

ааа ну тогда сори

ramshteks 30.08.2008 23:58

Код:

import fl.containers.ScrollPane;
import fl.containers.UILoader;
import fl.events.*;

var sp:ScrollPane = new ScrollPane();
sp.source = "http://************/uploads/080828/M5j5G6z2fl.jpg";
sp.addEventListener(ComponentEvent.RESIZE,  OnResize);
addChild(sp);

function OnResize(e:ComponentEvent):void {
        trace("abc");
        sp.update();
}

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

s8000_1 31.08.2008 00:15

Цитата:

Сообщение от ramshteks (Сообщение 761342)
прости уж что все урезал. и извини если уилоадер был нужен, но так хотя бы рабоает.

Я знаю, как сделать так, чтобы обычный ScrollPane работал :)
Проблема именно во взаимодействии UILoader и ScrollPane.
В частности из-за того, что в классе UIComponent есть методы:
Код:

protected function callLater(fn:Function):void {
if (inCallLaterPhase) { return; }
...
}

и
Код:

private function callLaterDispatcher(event:Event):void {
...
inCallLaterPhase = true;                       
var methods:Dictionary = callLaterMethods;
for (var method:Object in methods) {
method();
delete(methods[method]);
}
inCallLaterPhase = false;
}

UILoader вызывает событие ComponentEvent.RESIZE в конце метода draw, однако в это время статичная переменная inCallLaterPhase класса UIComponent равна true, поэтому функция CallLater класса ScrollPane не срабатывает.

Выход в принципе есть. Перенести присвоение inCallLaterPhase = false в методе callLaterDispatcher класса UIComponent в конец метода draw этого же класса. Но мне как-то не очень хочется править компоненту adobe, мало ли, какие-нибудь еще глюки могут возникнуть из-за этого.


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

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