Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Датагрид и вставленная в неё кнопка (http://www.flasher.ru/forum/showthread.php?t=137943)

lighto 26.03.2010 09:27

Датагрид и вставленная в неё кнопка
 
Код AS3:

<mx:DataGrid left="10" top="41" right="10" bottom="10" dataProvider="{bookz}" id="DG" change="ShowImage()">
  <mx:columns>
    <mx:DataGridColumn headerText="Код" width="30"  dataField="id"/>
    <mx:DataGridColumn headerText="Название книги" width="300" dataField="name"/>
    <mx:DataGridColumn dataField="Скачать" width="50">
          <mx:itemRenderer>
                  <mx:Component>
                        <mx:Button label="скачать" click="Downl();"/>
                  </mx:Component>
          </mx:itemRenderer>
      </mx:DataGridColumn>
  </mx:columns>
</mx:DataGrid>

Есть датагрид с вставленной в неё кнопкой, когда вешаю на клик функцию click="Downl();"
пишет 1180: Вызов предположительно неопределенного метода Downl.
вот функция
Код AS3:

public function Downl():void
{
if (DG.selectedIndex==-1)
{
Alert.show('Выберите из списка книгу, которую Вы хотите загрузить');       
return;
}       
init(progBar,btn1);
CheckFileInInternet();
}

что я делаю нетак??? :umnik2: а если пробую функцию сделать статичной но вообще выдает непонятно что.... Спасибо тем кто прочитает и ответит :)

Кип 26.03.2010 09:32

Считай, что
Код AS3:

           <mx:itemRenderer>
                  <mx:Component>
                        <mx:Button label="скачать" click="Downl();"/>
                  </mx:Component>
          </mx:itemRenderer>

это отдельный документ. Чтобы обратиться к основному документу, можешь использовать outerDocument:
Код AS3:

<mx:Button label="скачать" click="outerDocument.Downl();"/>


lighto 26.03.2010 09:52

Ага это да это теперь понятно я так и догадывался но теперь он выдает еще лучше
1061: Обращение к возможно неопределенному методу Downl через ссылку статического типа Class. ставлю статичной функцию он выдает кучу ошибок что незнает такое что внутри функции... и как это решить?

bastrakov 26.03.2010 09:59

лично мне это очень не понравилось... :-(

Код AS3:

 
                <mx:DataGridColumn dataField="dg3">
                        <mx:itemRenderer>
                                <mx:Component>
                                        <mx:Canvas width="100%" >
 
                                                                <mx:Script>
                                                                <![CDATA[
                                                                        import mx.controls.Alert;
                                                                        private function showAlert():void
                                                                        {
                                                                                Alert.show(data.dg3);
                                                                        }
                                                                ]]>
                                                                </mx:Script>
 
                                                                <mx:Label id="dg3text"
                                                                        text="{data.dg3}"
                                                                />
                                                                <mx:Button alpha="-1"
                                                        height="95%" width="95%" click="{showAlert()}"
                                                />
 
                                        </mx:Canvas>
                                </mx:Component>
                        </mx:itemRenderer>
                </mx:DataGridColumn>

к слову. гораздо удобнее делать отдельным компонентом и его вставлять здесь. во

lighto 26.03.2010 10:03

Ага я это думал но проблемма в том что в функции идет обращение к тем компонентам(кнопки и тд) и он же опять выдаст ошибку я уверен... должен же быть способ вызывать его незасовывая пол приложеня внутрь итемрендера... есть такое или нет? и все же попробую вдруг выйдет) хатя врядли)

Добавлено через 13 минут
ага ошибка та же что и тогда когда пробовал сделать функцию статичной((... блин а можно сделать одну функцию которая сама может читать все приложение и приложение с любого места её видет типа global иль еще как то?

BeDLiNt 26.03.2010 15:31

Диспатчте своё событие по клику, а снаружи ловите.

lighto 29.03.2010 09:11

Цитата:

Сообщение от BeDLiNt (Сообщение 895881)
Диспатчте своё событие по клику, а снаружи ловите.

А можно коротеньки пример а то что то непойму

BeDLiNt 29.03.2010 09:22

Ну напишите свой итемРендерер, и в нём по клику шлите событие, что по кнопке кликнули. Событие конечно и так шлется, стандратное флексовое всплывающее MouseEvent.CLICK. Можете конечно и его ловить, но ловить его Вам надо будет на уровне датагрида, а у него и его компонентов так же есть это событие и Вам надо будет разбираться, кто именно его послал, можно, но не верно.
Поэтому лучше использовать своё собственное, где вы можете передать в проперти нужные Вам данные. Т.к. листенера Вы не сможете повешать на Вашу кнопку извне потому что у Вас нет там на него ссылки, то можно использовать всплывающее(bubbles) событие, и тогда его можно ловить на уровне датагрида.
Вот собственно и все. В рендерере по клику dispatch. У датагрида addEventListener.

lighto 29.03.2010 11:02

:rolleyes:блин некогда неработал с этими dispatch очень прошу пример или ссылку на него

Кип 29.03.2010 11:15

Выносишь itemRenderer в отдельный файл, вешаешь в нём обработчик MouseEvent.CLICK, в обработчике пишешь:
Код AS3:

dispatchEvent(new Event("itemRendererClicked", true));

В основном классе на датагрид вешаешь addEventListender("itemRendererClicked", твояФункция)


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

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