![]() |
|
||||||||||
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Эта кнопка - часть раздвижного блока или всего контейнера с несколькими раздвижными блоками?
В блоке тем, что показывается, управляет режим - свернутый или развернутый. Если кнопка - часть блока, то и добавляться в список/удаляться из списка отображения она должна при смене режима показа блока, а никак не извне. Посмотрите, как сделано с текстовым полем. Точно так же и кнопка.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 50
|
Да, она реализуется также как и текстовое поле. просто, я не понимаю, как из InfoBlock.as, ведь кнопка там находится и при нажатии она указывает на функцию из Main.as. Помогите пожалуйста, как это можно реализовать.
получилось кнопки вставить. проблем нет. другая проблема появилась как сделать так, чтобы при нажатии на кнопку в вызываемую функцию из xml таблицы передавалось значение. допустим, вот этот блок, есть кнопка в определённом из блоков. допустим их 5 раздвижных блоков. при нажатии на 3 блок, в функцию передавалось, что это именно 3 блок!? Последний раз редактировалось Drac0Sha; 22.08.2011 в 12:01. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Надо завести какой-то идентификатор.. У Вас я так понимаю есть XML в Мейне, и блоки показывают узлы этого XML. Надо определить при нажатии, какой это блок и какой узел XML ему соответствует. Это один вариант. Другой – блок ведь "знает" весь нужный узел, можно просто определить блок как Event#currentTarget, и получить от него весь узел, за который он отвечает. То есть не искать этот узел в полном XML в Мейне, а взять его прямо из блока. Для этого в блоке сделать соответствующий геттер, возвращающий тот узел, который был передан блоку при инициализации.
Так понятно или нужен готовый код? Если нужен, то уточните, на что нужна реакция то – на нажатие на сам блок или всетаки на кнопку в блоке?)
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 50
|
Есть XML вида :
<data> <part> <id>10</id> <name>ИМЯ1</name> <date>22.09.2011</date> </part> <part> <id>24</id> <name>ИМЯ2</name> <date>22.09.2011</date> </part> .... <part> <id>32</id> <name>ИМЯN</name> <date>22.09.2011</date> </part> </data> private function dataCompleteHandler(event:Event):void var data:XML = new XML( (event.currentTarget as URLLoader).data ); var parties:XMLList = data.part; scene.addChild(blocksContainer); blocksContainer.x = 10; blocksContainer.y = 130; var blockHeight:Number = 0; for (var i:uint = 0; i < parties.length(); i++) { var block:InfoBlock = new InfoBlock(parties[i]); var btn_tools : tools = new tools(); //описание кода кнопки block.y = blockHeight; blockHeight += block.height + 1; btn_tools.y = 15; btn_tools.x = 540; btn_tools.addEventListener(MouseEvent.CLICK,ClickHand); block.addEventListener(MouseEvent.CLICK, infoBlockClickHandler); blocksContainer.addChild(block); block.addChild(btn_tools); _blocksArray.push(block); } } id из XML файла, причем этот id того блока в котором находится кнопка. Код функции CLickHand private function ClickHand(e:Event) : void { var stat_loader:URLLoader = new URLLoader(); var stat_request:URLRequest=new URLRequest("http://сайт/click.php");// заменяем на ссылку к вашему скрипту stat_request.method=URLRequestMethod.POST; // добавление параметров в запрос var stat_vars:URLVariables = new URLVariables(); stat_vars['auth_key']=auth_key; stat_vars['viewer_id']=viewer_id; stat_vars['uid'] =_info..id; // Непонятно, правильно это или нет , что сделать?? stat_loader.addEventListener(Event.COMPLETE,print); stat_request.data=stat_vars; // выполнение запроса stat_loader.load(stat_request); } очень важная... Тоесть не получается передать в эту функцию параметр id из XML файла и сделать, чтобы при нажатии на кнопку блок не расширялся.. Помогите пожалуйста, желательно кодом, а то я уже все перепробовал.. Добавлено через 5 часов 49 минут ещё попробовал но передаёт лишь 0. видимо надо так же как и parties сделать из него массив, зависящий от i. но как!? или я не правильно думаю!? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я, уж извините, на своем примере дописал
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 50
|
СПАСИБО ОГРОМНОЕ все отлично работает!!!
Только можно еще пару вопросиков: 1.Я изменил infoblock, чтобы кнопка всегда была в закрытом состоянии, но заметил, что первое нажатие на кнопку открывает блок, а только второе вызывает функцию как можно сделать так чтобы, при первом нажатии вызывалась функция и блок не открывался при нажатии на кнопку вот infoblock.as: package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; import flash.events.TextEvent; /* * * * * * * * * * * * * @author wolsh * * * \* * * * * * * * * */ public class InfoBlock extends Sprite { static public const BLOCK_BUTTON_CLICKED:String = "blockButtonClicked"; private var _info:XML; private var _mode:uint = 0; private var _backgroundColor:uint = 0x000000; private var _backgroundAlpha:Number = 0.24; private var _blockWidth:Number = 400; private var _date:IconLabel; private var _name:IconLabel; private var _title:IconLabel; private var _text:TextField; private var _labelFormat:TextFormat = new TextFormat("Arial", 11, 0x000000); private var _textFormat:TextFormat = new TextFormat("Arial", 12, 0x000000); private var _hiden:Boolean = true; private var btn_tools : tools = new tools(); public function InfoBlock(info:XML) { _info = info; prepare(); setMode(0); drawBack(); } private function prepare():void { _date = new IconLabel(new Bitmap(new _dateIcon()), _info..date, _labelFormat); _name = new IconLabel(new Bitmap(new _userIcon()), _info..user, _labelFormat); _title = new IconLabel(new Bitmap(new _titleIcon()), _info..title, _labelFormat); this.addChild(_date); _date.x = 10, _date.y = 10; this.addChild(_name); _name.x = 10, _name.y = 30; this.addChild(_title); _title.x = 10, _title.y = 50; this.addChild(btn_tools); btn_tools.x = 450; btn_tools.y = 25; _text = new TextField(); _text.defaultTextFormat = _textFormat; _text.multiline = true; _text.wordWrap = true; _text.width = _blockWidth - 20; _text.htmlText = _info..message.text(); _text.height = _text.textHeight + 4; } private function setMode(mode:uint):void { if (mode == _mode) return; if (mode == 0) { this.removeChild(_text); } else { this.addChild(_text); _text.x = 10, _text.y = 70; btn_tools.addEventListener(MouseEvent.CLICK, buttonClickHandler); } _mode = mode; drawBack(); } private function buttonClickHandler(event:MouseEvent):void { event.stopImmediatePropagation(); dispatchEvent(new Event(BLOCK_BUTTON_CLICKED)); } private function drawBack():void { this.graphics.clear(); this.graphics.beginFill(_backgroundColor, _backgroundAlpha); this.graphics.drawRoundRect(0, 0, _blockWidth, this.height + 20, 12); } public function get hiden():Boolean { return _hiden; } public function set hiden(value:Boolean):void { _hiden = value; setMode(_hiden ? 0 : 1); } public function get info():XML { return _info; } } } необходимо их также объявить как btn_tools и сделать btn_one.addEventListener(MouseEvent.CLICK, buttonClickHandler_one); btn_two.addEventListener(MouseEvent.CLICK, buttonClickHandler_two); private function buttonClickHandler_two(event:MouseEvent):void { event.stopImmediatePropagation(); dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_TWO)); } private function buttonClickHandler_one(event:MouseEvent):void { event.stopImmediatePropagation(); dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_ONE)); } block.addEventListener(InfoBlock.BLOCK_BUTTON_CLICKED_ONE, blockButtonClickedHandler_one); block.addEventListener(InfoBlock.BLOCK_BUTTON_CLICKED_TWo, blockButtonClickedHandler_two); а и еще предположим у меня XML файл вида: Как мне вывести на экран (т.е. в _text.htmlText) Сергей и Олег? которые в <friends> Последний раз редактировалось Drac0Sha; 23.08.2011 в 11:54. |
|
|||||
|
Banned
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Aug 2011
Сообщений: 50
|
ну это просто находится в раздвижных блоках. я думаю, многим людям понадобится эта информация.
toFL, как вы предложили не подойдёт, так как Мне нужно вывести наподобие _text.htmlText = _info..message.text(); то есть чтобы их обоих вывести нужно использовать цикл? попробовал ещё так, как раз цикл var friends_number:XMLList = _info.friends; for (var i:uint = 0; i < friends_number.length(); i++) { _text.htmlText += _info..friends.friend[i] + \n' + _info..date } исправил ) дописать надо было лишь правда, выводит в столбик, а надо в строчку. не знаете, в чем может быть проблема!? Последний раз редактировалось Drac0Sha; 23.08.2011 в 12:56. |
|
|||||
|
Banned
|
Цитата:
И еще: я настоятельно рекомендую Вам, перед вопросом, попытаться, хотя бы попытаться, решить проблему самому. |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 50
|
Я знаю, что \n - символ следующей строки, но и без него выдает в столбик _text.htmlText += _info..friends.friend[i] ;
Я просто забыл стереть перед тем как написать |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|