|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
меню из массива неизвестного размера. Проблема с target
Всем привет это опять я.
Столкнулся тут с проблемой. Делаю приложение для вконтакта. В приложении есть кнопочка "найти друга", по нажатию на которую появляется скроллирующийся список друзей пользователя, при нажатии на одного из друзей в специальном окошечке должен появлятся ID этого друга. Делаю все следующим образом. Выполняю запрос к api вконтакте GetFriends, на который мне приходит xml со списком id-шников друзей. Я этот xml сразу перевожу в массив friendsArray, после чего выполняю запрос GetProfiles(String(friendsArray)), на который мне приходит xml с их first_name, last_name и т.п. При загрузке я этот xml аналогично перевожу в массив и сортирую for(var u:int =0; u<e.xml..user.length(); u++) { FIOstr = String(e.xml.user[u].first_name+" "+e.xml.user[u].last_name); fioArray.push(String(FIOstr)); } fioArray.sort(Array.CASEINSENSITIVE); Потом создаю листенер внутри условного цикла for (addEventListener(MouseEvent.MOUSE_OVER, rectOver)). Сначала я этот листенер повесил на мувик Friend. И вроде бы все путем. Тогда создаем где-нить вначале var clip:Movie Clip, а потом в функции rectOver(e:MouseEvent) пишем clip = e.target as Movie Clip; и тогда все свойства мувика Friend передаются переменно clip. Тогда бы можно было бы в цикле for создать Friend'у свойство и присвоить ему значение, например, e.xml.user[i].uid, а потом взять его при нажатии. И все было бы хорошо... Но не работало. И, оттрэйсив e.target я обнаружил, что на него реагирует не мой мувик Friend, а текстовое поле Friend_txt ... тогда я написал код ниже. В нем все работает - на наедение на определенный пункт меняется цвет, на сведении - меняется обратно... но вот только как вытащить пресловутый e.xml.user[i].uid, который мне так нужен?... Сбился с ног искать ответ на этот вопрос.. Вроде бы что-то близкое к тому, что мне надо связано с currentTarget, только я пока не понимаю,что это. Объясните кому не жалко? Хэлпы читал, только все ранво не очень понятно. Если бы можно было бы через этот target, который я ловлю, отслеживать и не только сам таргет (то есть в данном случае текстовое поле), но и мувик, в котором он находится (то есть мувик Friend)? ниже привожу код всего этого, как он выглядит сейчас: for(var i:int =0; i<e.xml..user.length(); i++) { var Friend_txt:TextField = new TextField(); var fmt2:TextFormat = new TextFormat(); fmt2.size = 10 fmt2.font = "Verdana"; fmt2.indent = 10 Friend_txt.defaultTextFormat = fmt2; Friend_txt.wordWrap = true; Friend_txt.selectable=false; Friend_txt.x=-0.5; Friend_txt.y=-0.5; Friend_txt.width = 248.7; Friend_txt.height = 19; Friend_txt.text = e.xml.user[i].uid var rectangle = new Friend(); forScroll.scrollMov.addChild(rectangle); rectangle.x= 0; rectangle.y= i*18; rectangle.addChild(Friend_txt); var Ob:Object = new Object; Ob.UID2= e.xml.user[i].uid Ob = Friend_txt Ob.text = String(fioArray[i]); Ob.background = true; Ob.border = true; Ob.borderColor = 0xCCCCCC; Ob.backgroundColor = 0xFFFFFF; Ob.textColor = 0x000000; Ob.selectable=false; varDif=forScroll.masker.height-forScroll.scrollMov.height; Ob.addEventListener(MouseEvent.MOUSE_OVER, rectOver); Ob.addEventListener(MouseEvent.MOUSE_OUT, rectOut); Ob.addEventListener(MouseEvent.CLICK, rectClik); } function rectClik(e:MouseEvent):void { clip = e.target as Object; toID.text= String(clip.UID2); forScroll.visible=false; } function rectOver(e:MouseEvent):void { var fmt3:TextFormat = new TextFormat(); fmt3.size = 11 fmt3.font = "Verdana"; fmt3.indent = 20 clip = e.target as Object; clip.backgroundColor = 0xC0EFFF clip.textColor = 0x306591 clip.setTextFormat(fmt3); } function rectOut(e:MouseEvent):void { clip.backgroundColor = 0xFFFFFF; clip.textColor = 0x000000; clip.setTextFormat(fmt2); } |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
DisplayObjectContainer#mouseChildren в помощь.
|
|
|||||
огроменное спасибо udaaff!=) Это работает так, что лучше и не придумаешь!)
Тогда ещё вопрос... немного по другой теме. Но все-таки. может быть есть какой-то способ отсортировать xml по какому-нибудь элементу? А то, во-первых, это неудобно - переводить его в массив, потом сортировать, а во вторых столкнулся с одной проблемой. Список юзеров то я отсортировал во имени-фамилии for(var u:int =0; u<e.xml..user.length(); u++) { FIOstr = String(e.xml.user[u].first_name+" "+e.xml.user[u].last_name); fioArray.push(String(FIOstr)); } fioArray.sort(Array.CASEINSENSITIVE); то получается, что id не соответствует фамилии. Можно было бы как-то впихнуть id в массив fioArray, только непонятно как, но было бы круче, если бы можно было бы сортировать xml по какому-нибудь элементу. Я что-то так и не нашел как это сделать. |
|
|||||
Регистрация: Feb 2008
Сообщений: 100
|
__________________
http://komimap.ru |
|
|||||
по ходу это под flex
Добавлено через 6 часов 20 минут я нашел простое решение. Это сделать fioArray многоуровневым массивом. В итоге получается for(var u:int =0; u<e.xml..user.length(); u++) { FIOstr = String(e.xml.user[u].first_name+" "+e.xml.user[u].last_name); fioArray.push([String(FIOstr), e.xml.user[u].uid]); } fioArray.sort(Array.CASEINSENSITIVE); всем спасибо за участие! Последний раз редактировалось ZergMaster; 06.01.2010 в 21:29. |
Часовой пояс GMT +4, время: 02:41. |
|
« Предыдущая тема | Следующая тема » |
|
|