Hello again,

On Sat, Jul 24, 2010 at 5:39 PM, Alexander Farber
<alexander.far...@gmail.com> wrote:
> 1) For some reason I get numerous warnings:
> warning: unable to bind to property 'label' on class 'Object' (class
> is not an IEventDispatcher)
>
> 2) The TileList tl2 has a scrolling issue. I've searched around
> (for example: http://forums.adobe.com/message/2939121 )
> and it is probably because the itemRenderer is being reused
> and I'm making some wrong assumptions... But where?

With the following renderer code I could get rid of the warning
(I guess it's not ok to use {data.label} in the renderer),
but unfortunately the "tl2" scrolling problem is still there -

MyRenderer.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml";
           verticalScrollPolicy="off" horizontalScrollPolicy="off"
           width="100%" height="100%">
    <mx:Script>
        <![CDATA[

            override public function set data(value:Object):void {
                super.data = value;

                var str:String = String(value.label);
                myLabel.text = str;
                myLabel.setStyle('color', findColor(str));
            }

            public static function findColor(str:String):uint {
                return (str.indexOf('♥') != -1 ||
                    str.indexOf('♦') != -1) ? 0xFF0000 : 0x000000;
            }
        ]]>
    </mx:Script>

    <mx:Label id="myLabel" truncateToFit="true" width="60"/>
</mx:Canvas>


MyTest.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
                                creationPolicy="all" 
applicationComplete="init(event);">
        <mx:Style>
                @font-face {
                        src:url("C:\\WINDOWS\\Fonts\\arial.ttf");
                        fontFamily: myFont;
                        unicodeRange:
                                U+0020-U+0040, /* Punctuation, Numbers */
                                U+0041-U+005A, /* Upper-Case A-Z */
                                U+005B-U+0060, /* Punctuation and Symbols */
                                U+0061-U+007A, /* Lower-Case a-z */
                                U+007B-U+007E, /* Punctuation and Symbols */
                                U+0410-U+0451, /* cyrillic */
                                U+2660-U+266B; /* card suits */
                }
                List, CheckBox, Label, Button, PopUpButton, TileList {
                        fontFamily: myFont;
                        fontSize: 24;
                }
        </mx:Style>
        
        <mx:Script>
                <![CDATA[
                        import mx.controls.*;
                        import mx.events.*;
                        
                        [Bindable]
                        private var bids:Array;
                        private var tl:TileList;
                        
                        private function init(event:FlexEvent):void {
                                bids = createBids();
                                pub.popUp = createList(bids);
                        }
                        
                        private function createBids():Array {
                                var arr:Array = [{label: 'Pass'}];
                                for (var i:uint = 6; i <= 10; i++)
                                        for (var j:uint = 0; j < 5; j++)
                                                arr.unshift({label: i+'♠♣♦♥ 
'.charAt(j%5)});
                                
                                return arr;
                        }
                        
                        private function createList(arr:Array):TileList {
                                tl = new TileList();
                                tl.maxColumns = 5;
                                tl.width = 350;
                                tl.height = 250;
                                tl.dataProvider = arr;
                                tl.itemRenderer = new ClassFactory(MyRenderer);
                                tl.addEventListener('itemClick', 
itemClickHandler);
                                
                                if (arr.length > 0) {
                                        tl.selectedIndex = arr.length - 1;
                                        pub.label = arr[tl.selectedIndex].label;
                                }
                                
                                return tl;
                        }
                        
                        private function itemClickHandler(event:ListEvent):void 
{
                                var index:uint = tl.columnCount * 
event.rowIndex + event.columnIndex;
                                var label:String = bids[index].label;
                                pub.label = label;
                                pub.setStyle('color', 
MyRenderer.findColor(label));
                                pub.close();
                                tl.selectedIndex = index;
                        }
                ]]>
        </mx:Script>
        
        <mx:Panel title="TileList scrolling problem" height="100%" width="100%"
                          paddingTop="10" paddingBottom="10" paddingLeft="10" 
paddingRight="10">
                
                <mx:Label width="100%" color="blue" text="Select your bid:"/>
                
                <mx:TileList id="tl2" height="200" width="200"
                                         maxColumns="5" rowHeight="30" 
columnWidth="60"
                                         dataProvider="{bids}" 
itemRenderer="MyRenderer"/>
        </mx:Panel>
        
        <mx:ApplicationControlBar width="100%">
                <mx:Spacer width="100%"/>
                <mx:CheckBox id="auto" label="Auto:"/>
                <mx:Button id="left" label="&lt;&lt;"/>
                <mx:PopUpButton id="pub" width="90"/>
                <mx:Button id="right" label="&gt;&gt;"/>
        </mx:ApplicationControlBar>
</mx:Application>

Reply via email to