Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   custom itemRenderer (http://www.flasher.ru/forum/showthread.php?t=114903)

romantique 13.08.2008 10:46

custom itemRenderer
 
Всем привет. Пытаюсь юзать кастомный рендерер для дата грида. Но пока получается нечто для меня странное и непонятное. Вот что я дела:

Код:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:bench="components.benchmark.*">
        <mx:Script>
                <![CDATA[
                        private function sampleXML():XML
                        {
                                var xml:XML =
                                        <bench name="top 10">
                                                <company name="Sibers" tend="up"/>
                                                <company name="Adobe" tend="up"/>
                                        </bench>
                        }
                ]]>
        </mx:Script>
        <bench:BenchmarkRanking sourceFile="{sampleXML()}"/>
</mx:Application>

Вот компонента BenchmarkRanking

Код:

<mx:Panel>
        <mx:DataGrid id="dataGrid" dataProvider="{tends}">
                <mx:columns>
                        <mx:DataGridColumn dataField="company"/>
                        <mx:DataGridColumn itemRenderer="BenchRenderer"/>
                </mx:columns>
        </mx:DataGrid>
        <mx:Script>
                <![CDATA[
                        private var tends:Array = null;
                       
                        public function set sourceFile(obj:XML):void
                        {
                                // забиваю массив tends начинкой из XML
                        }
                ]]>
        </mx:Script>
</mx:Panel>

И сам кастомный рендерер:

Код:

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="addSymbol(event)">
        <mx:Script>
                <![CDATA[
                        [Embed('/swf/tend.swf', symbol='UpArrow_design')]
                        private static var UpArrow:Class;

                        [Embed('swf/tend.swf',symbol='DownArrow_design')]
                        private static var DownArrow:Class;

                        private function addSymbol(event:FlexEvent):void
                        {
                                var sprite:Sprite = null;
                                if( data.tend=="up" )
                                        sprite = new UpArrow() as Sprite;
                                else if( data.tend=="down" )
                                        sprite = new DownArrow() as Sprite;
                                wrapper.addChild(sprite);
                        }
                ]]>
        </mx:Script>
        <mx:UIComponent id="wrapper"/>
</mx:Canvas>

Всё бы ничего, но вот когда я сортирую датагрид тыцканьем по дататипсам с моим рендерингом происходит нечто странное. Вапще как бы там должны быть стреоски, две, зелёная и красная... Но порой они обе красные, или обе зелёные...

Вот аутпут
http://ccfit.nsu.ru/~stulov/BenchmarkingRanking.swf

Потыкайте сортировку и понаблюдайте за стрелосками. Они скачу совсем не соответственно остальным айтемам в столбце...

Может я чё делаю неверно? Или не понял механизма кастомного рендеринга... Может кто нибудь подсказать выход?

Выложенный код немного упрощён но смысл тот же

romantique 13.08.2008 16:02

Уже разобрался. Сделал вот так:
Код:

        public class BenchmarkTendRenderer extends VBox
        {
                public function BenchmarkTendRenderer()
                {
                        super();
                }
               
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                {
                        // вот тут своя рисовалка
                        super.updateDisplayList(unscaledWidth,unscaledHeight);
                }
        }



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

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