/ / Flex: Vlastné kontextové menu pre komponent - flex, flex4

Flex: Vlastná kontextová ponuka komponentu - flex, flex4

Mám aplikáciu Flex bežiacu s programom Flash Player, nie AIR, ktorá obsahuje a Tree že by som chcel vložiť vlastné kontextové menu.

Vyskúšal som to <mx:Tree ... contextMenu="{MyClassWithStatic.menu}">, ale to neurobilo nič.

Hľadal som a niekde som našiel tento citát z niektorých dokumentov Adobe

V nástroji Flex alebo Flash Builder iba na najvyššej úrovnikomponenty v aplikácii môžu mať kontextové ponuky. Napríklad ak je ovládací prvok DataGrid podradený kontajneru TabNavigator alebo VBox, ovládací prvok DataGrid nemôže mať svoju vlastnú kontextovú ponuku.

takže išiel smerom hore a skúšal každý nadradený prvok, kým som nedosiahol svoj <Application>-prvok, ktorý je v súlade s tým, čo napísali.

Pokúsil som sa vytvoriť komponent Flex založený na skupine (predvolená), ktorá obsahovala môj strom, a kontextovej ponuke na prvku najvyššej úrovne v nádeji, že to bude fungovať, ale bezvýsledne.

Existuje nejaký iný spôsob, ako to zvládnuť, ktorý som zatiaľ nenašiel?

Kód, ktorý používam na vytvorenie ponuky:

var menuItems:Array = [];
var rename:ContextMenuItem = new ContextMenuItem("Rename");
rename.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, renameSelectedHandler);
menuItems.push(rename);
menu.customItems = menuItems;
menu.hideBuiltInItems();

odpovede:

2 pre odpoveď č. 1

Máte pravdu, kontextová ponuka funguje iba navrchukomponenty na úrovni. Je to obmedzenie Flexa, ktoré je nepríjemné a nemalo by tam byť na prvom mieste. Nie je toho veľa, čo môžete urobiť, pretože neexistuje žiadny spôsob, ako zachytiť udalosť, okrem použitia nejakého triku Javascript, ale ani potom vám nehovorí, kam ste klikali.

Ak by som bol na tvojom mieste, zabudol by som na tento koncept a úplne by som prestal používať pravé kliknutie, pokiaľ je to možné.


0 pre odpoveď č. 2

Nemôžem si byť istý, pretože tam nie je všetok kód. Zdá sa však, že ste ignorovali svoj vlastný výskum. Nepoužívajte nový komponent ani nič, čo „obsahuje“ váš strom. Potom iba prilepte strom do svojej aplikácie.

Tiež si pamätám, že TreeItemRenderer nie je rovnaký ako v iných UIkomponentoch. Možno otestujte svoj kód ponuky najskôr pomocou nástroja Datagrid a uistite sa, že funguje. Veľa šťastia


0 pre odpoveď č. 3

Sám som to neskúšal, ale po prečítaní komentárov na http://michael.omnicypher.com/2007/02/flex-trees-with-context-menu_14.html vyzerá to, že by ste mohli pridať kontextové menu do renderovacieho modulu stromu.

Článok a komentáre na http://blog.arc90.com/2008/04/21/adding-a-contextmenu-to-a-flex-tree/ tiež stojí za pozretie.