Просмотр полной версии : источник события в cellRender
Есть трабла.
Есть экземпляр компонента DataGrid. Есть множество строк DataGrid с вложенными cellRender-ом клипами с экземпляром компонента Button.
Подскажите, как по событию click этого экземпляра компонента Button "отловить" индекс строки DataGrid, в которой находится этот источник события.
А что, CellRenderer не знает свой индекс? А кто слушает click?
А что, CellRenderer не знает свой индекс?
- Нет.
А кто слушает click?
- Хотел бы узнать...
- Нет.
Правда? А getCellIndex для чего?
- Хотел бы узнать...
Супер. Т.е. вы отслеживаете click, но не знаете, кто является слушателем?
Вы не поняли. Пусть слушает обработчик события на самой кнопке:
on(click){trace(this);}
А getCellIndex для чего?
http://livedocs.adobe.com/flash/mx2004/main_7_2/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Flash_MX_2004&file=00002109.html
Зачем вы мне ссылку даете на хелп по getCellIndex? Я опровергаю ваши слова, что CellRenderer не знает своего индекса, а вы мне суете ссылку на хелп. Зачем?
Использовать on, onClipEvent в данном случае нельзя. У вас должен быть класс, наследуемый от UIComponent, со всеми свойствами CellRenderer. Кроме этого, необходимо организовать подписку в классе на событие click экземпляра кнопки Button.
Использовать on, onClipEvent в данном случае нельзя. У вас должен быть класс, наследуемый от UIComponent, со всеми свойствами CellRenderer. Кроме этого, необходимо организовать подписку в классе на событие click экземпляра кнопки Button.
Вы не доконца вникли в суть проблемы (или я не понял суть ответа).
Мне нужно установить индекс строки DataGrid в которой CellRenderer производит события изнутри самого CellRenderer. Не думаю, что расширение методов класса может дать нужный результат. Если Вы считаете свой совет правильным, поясните его.
Явление проблемы: если Вы смодулируете, то что я описал и последовательно сверху вниз будете кликать кнопки внутри CellRenderer, то trace покажет повторение идентичных, через каждые три строчки DataGrid, имён источников события. Надеюсь пояснил доходчиво...
И ещё. В данном случае нельзя подписать на одно событие весь CellRenderer. Т.е. в каждой строке DataGrid с CellRenderer находится несколько слушателей события click. Если Вы считаете нужным подсказать как это можно править, сделайте, пожалуйста, доходчиво.
И ещё. Если кого-то заинтересовала проблема. Я выложу код модели и трассировку.
Советую вдумчиво изучить это:
http://livedocs.macromedia.com/flash/8/main/00003131.html
Потому как то, что вы написали, доходит до меня с трудом. Особенно «CellRenderer производит события изнутри самого CellRenderer».
Модулировать мне нечего, пример в хелпе описан. Если внятно объяснить не получается, показывайте исходник.
on, onClipEvent — нет этого в AS2. Не-ту. Это актуально было лет семь назад.
...Если внятно объяснить не получается, показывайте исходник...
ОК! Только приведу его к скриптовому виду.
Не получилось поместить всё в скрипт, по этому надо будет сделать мувик в библиотеке с идентификатором "cell" - это и будет слой.
На нем скрипт:
createClassObject(mx.controls.Button,"but",5,{label:"Test"});
var listener = {}
listener.click = function(evt){
trace(evt.target)
}
but.addEventListener("click",listener)
Скрипт на _root:
dp_dg = [{par0:"1"},{par0:"2"},{par0:"3"},{par0:"4"},{par0:"5"},{par0:"6"}]
createClassObject(mx.controls.DataGrid,"dg",1,{_width:300,_height:100,rowHeight:30});
dg.setStyle("alternatingRowColors", Array(0xEAEFF4, 0xF8FAFB));
newColumn = new mx.controls.gridclasses.DataGridColumn("par0");
newColumn.width = 90;
dg.addColumn(newColumn);
newColumn = new mx.controls.gridclasses.DataGridColumn("par1");
newColumn.cellRenderer = "cell"
newColumn.width = 300;
dg.addColumn(newColumn);
dg.dataProvider = dp_dg
При трассировке виден эффект о котором я говорил (при чём эффект не наблюдается, если высота DataGrid вмещает все данные)
Мне надо, чтобы трейс выводил индекс строки DataGrid, в которой расположен
CellRenderer
mushtra получает плюс за отсутствие тегов
mushtra получает плюс за отсутствие тегов
Я, кажется, ничего не нарушил...
http://flasher.ru/forum/rules.php
и откуда +0.3?
[__etc: http://flasher.ru/forum/showthread.php?t=90042]
Клип должен являться наследником UIComponent со всеми описанными свойствам, вы хелп про CellRendered API вообще читали?
з.Ы. Умолчу про то, что Array надо использовать как класс, а не как функцию (ещё один пережиток прошлого).
...вы хелп про CellRendered API вообще читали?...
Да. Спасибо, я понял. Но если я укажу метод слушателя события в классе, мне всё-равно надо будет ссылаться на свойство "родительского" DataGrid, каким методом мне "отловить" это свойство?
О каком свойстве родительского DataGrid речь идет? Какие слушатели? Зачем они, когда можно подписать сам CellRenderer на события кнопки? Метод getCellIndex() в кастомном CellRenderer будет описан DataGrid-ом при создании ячеек. Я вам крайне советую заглянуть в класс mx.controls.cells.CheckCellRenderer, может тогда вопросы отпадут (сомневаюсь, правда).
__etc, спасибо за пояснения.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.