Опитвам се да създам динамичен превъртащ се списък във Flash AS3. Когато създавам списък, го задавам да бъде първоначална дължина. По-късно добавям още обекти към списъка, който е извън оригиналния размер на списъка. Искам да мога да превъртя списъка надолу и да видя всички обекти.
Лентата ми за превъртане просто премества y позицията на списъка. Въпреки това, всеки обект, който е изчертан извън оригиналния размер на списъка, не се показва, когато стартирам програмата и превъртя. Как мога да поправя това?
Имам обект списък, който има функцията по-долу, когато трябва да добавя съдържание към списъка. Когато инициализирам списъка, му давам начална височина и ширина, които използвам за създаване на маска.
public function AddPlayers(pPlayers:Array, pScrollBar:ScrollBar):void
{
var player:Player;
trace("happened again");
for (var i:int = 0; i < pPlayers.length; i++)
{
player = pPlayers[i];
this.addChild(player);
player.x = 0;
player.y = player.height * i;
}
pScrollBar.InitializeScrollBar(this);
}
Функцията InitializeScrollBar актуализира свойствата на лентата за превъртане въз основа на размера на добавеното съдържание. Променя основно размера на лицето за превъртане в зависимост от размера на съдържанието на списъка.
public function InitializeScrollBar(pList:List)
{
this.list = pList;
// Size and place scroll track
scrollTrack.height = scrollHeight - 2 * scrollUp.height;
scrollTrack.y = scrollUp.height;
addChild(scrollTrack);
// Place scroll face
scrollFace.y = scrollUp.height;
scrollFace.height = scrollTrack.height * (scrollHeight / list.height);
addChild(scrollFace);
// Place scroll buttons
addChild(scrollUp);
scrollDown.y = scrollDown.height + scrollTrack.y + scrollTrack.height;
addChild(scrollDown);
scrollDown.scaleY = -1;
scrollFace.addEventListener(MouseEvent.MOUSE_DOWN, MoveScrollFace);
scrollDown.addEventListener(MouseEvent.CLICK, MoveDown)
scrollUp.addEventListener(MouseEvent.CLICK, MoveUp)
}
Също така имам функция за актуализиране в лентата за превъртане, която използва събитие ENTER FRAME, когато лицето за превъртане се плъзга.
private function Update(evt:Event)
{
trace(mouseY);
scrollFace.y = mouseY;
if (scrollFace.y <= scrollTrack.y)
{
scrollFace.y = scrollTrack.y;
}
else if (scrollFace.y + scrollFace.height >= scrollTrack.y + scrollTrack.height)
{
scrollFace.y = scrollTrack.y + scrollTrack.height - scrollFace.height;
}
var scrollChange:Number = (list.height - scrollHeight)/(scrollTrack.height - scrollFace.height);
list.y = -1 * scrollChange * (scrollFace.y - scrollUp.height);
list.y = list.y + list.y % 25;
}
Номерът е да имате два отделни записа във вашата защитна стена, един за вход във формуляра и един за вход във facebook. Но в моя случай имам един URL адрес за влизане, където потребителят може или да влезе, като използва своите идентификационни данни, или да щракне върху Facebook връзка, за да се удостовери чрез Facebook OAuth2 API, използвайки
FOSFacebookBundle
. Ето пример от мояsecurity.yml
конфигурационен файл, за да накарам това да работи:И ето проба от моя
routing.yml
файл, който се използва за дефиниране на маршрути за сигурност, необходими, за да може това да работи:Използвайки
security.yml
преди, механизмът за сигурност ще провери дали потребител е влязъл с помощта на формуляр преди потребител, влязъл с Facebook. Това е така, защото редът, в който доставчиците са дефинирани вchain_provider
. При всяка заявкаFOSFacebookBundle
проверява дали има facebook oauth2 бисквитка, ако е така, се опитва да зареди вашия потребител. Ако не успее да намери бисквитката, процесът на удостоверяване ще опита друг доставчик, ако е дефиниран след доставчика на facebook.Във вашия случай, когато потребителят се опита да отиде на защитен URL адрес (в access_control), страницата за вход във facebook се показва и той се удостоверява, след което се пренасочва към вашия сайт, бисквитката се намира и потребителят се удостоверява успешно от
FOSFacebookBundle
. За да задействате ръчно процеса на удостоверяване, поставете бутон за свързване с facebook на вашия сайт, след което в javascript пренасочва потребителя към друга страница от вашия сайт. По този начин бисквитката ще бъде зададена от бутона за свързване иFOSFacebookBundle
ще го удостовери при следваща заявка. Това, което правя, е да пренасоча потребителя към пътя login_check за facebook в javascript, когато бутонът за свързване с facebook е бил успешен. По този начин механизмът за сигурност ще го пренасочи там, където е посочено в конфигурацията за сигурност.Надявам се, че това ще ви помогне да постигнете това, което искате. Не се колебайте да задавате допълнителни въпроси, ако нещо не е ясно.
@Последващо действие #1
Наистина не можете да поставите
fos_userbundle
под възелpublic
в конфигурацията на защитната стена, защото това не е валидна опция. Низътfos_userbundle
се използва за препратка къмFOSUserBundle
клас UserProvider. Никога не съм използвал този пакет, но като чета документацията, трябва да използватеform_login
. Можете да разгледате документацията наFOSUserBundle
в Стъпка #5 и по-долу. Грешката, която споменавате, е странна, защото ви казва, чеlogin_path
не се обработва от защитната стена, но това е така, тъй като защитната стена съвпада с всичко, което започва с/
(^/
). Не съм сигурен какво се обърка, но вървите в правилната посока. Използвайтеform_login
и опитайте да проверите защо не работи от там.Поздрави,
- person shanethehat   schedule 29.07.2011Мат