Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   itemrenderer фильтр и пользователи онлайн. (http://www.flasher.ru/forum/showthread.php?t=170052)

sstotenkopf 17.10.2011 19:08

itemrenderer фильтр и пользователи онлайн.
 
Вообщем не могу понять логику, почему это происходит. Есть datagroup его датапровайдер arraycollection в itemrenderer-е элемент bordercontainer с двумя лейблами, в нем же еще один bordercontainer, который меняет цвет в зависимости от того онлайн пользователь или нет 1 или 0 соответственно (data.on), после применения фильтра, все меняется и начинают подсвечиваться контейнеры, пользователи которых не онлайн... Не могу понять в чем ошибка.

test.mxml
Код:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
                        >
        <fx:Script>
                <![CDATA[
                        import flash.events.*;
                       
                        import mx.collections.Sort;
                        import mx.collections.SortField;
                        import mx.controls.Alert;
                        import mx.events.StateChangeEvent;
                       
                        [Bindable]
                       
                        public var arr:Array = [
                                {label:"Рон", sn:"harisson", id:"784394", on:"1"},
                                {label:"Collen", sn:"johnson", id:"908364", on:"1"},
                                {label:"Sharon", sn:"marshal", id:"373467", on:"0"},
                                {label:"Ronnie", sn:"cartman", id:"76384", on:"0"},
                                {label:"Sydney", sn:"Bristow", id:"34334", on:"1"},
                                {label:"Brad", sn:"Shrayer", id:"27683", on:"0"},
                                {label:"Fred", sn:"Kennersy", id:"34566", on:"0"},
                                {label:"Marc", sn:"Larren", id:"87623", on:"1"},
                        {label:"Иван", sn:"Иванов", id:"784394", on:"1"},
                        {label:"Михаил", sn:"Лаврентьевич", id:"908364", on:"1"},
                        {label:"Сергей", sn:"Сайфутдиновичев", id:"373467", on:"0"},
                        {label:"Александр", sn:"Невров", id:"76384", on:"0"},
                        {label:"Дмитрий", sn:"Серов", id:"34334", on:"1"},
                        {label:"Тимофей", sn:"Домин", id:"27683", on:"0"},
                        {label:"Леонид", sn:"Щербаков", id:"34566", on:"0"},
                        {label:"Герман", sn:"Дементьве", id:"87623", on:"1"},
                        {label:"Николай", sn:"Антонов", id:"784394", on:"1"},
                        {label:"Роман", sn:"Соловьев", id:"908364", on:"1"},
                        {label:"Кирилл", sn:"Карпунин", id:"373467", on:"0"},
                        {label:"Антон", sn:"Марков", id:"76384", on:"0"},
                        {label:"Андрей", sn:"Примачев", id:"34334", on:"1"},
                        {label:"Алексей", sn:"Калинин", id:"27683", on:"0"},
                        {label:"Юрий", sn:"Ростков", id:"34566", on:"0"},
                        {label:"Дмитрий", sn:"Фомичев", id:"87623", on:"1"}]
                       
                       
                        private var firstTime:Boolean = true;
                        public var frlistnum:int;
                        ///фильтр
                        public function sortCollection() : void
                        {
                                //boxer.layout.verticalScrollPosition = 15;
                                var dataSortField:SortField = new SortField();
                                dataSortField.name = "on";
                                dataSortField.numeric = true;
                                dataSortField.reverse();
                                var numericDataSort:Sort = new Sort();
                                numericDataSort.fields = [dataSortField];
                                arrColl.sort = numericDataSort;
                                arrColl.refresh();
                               
                        }
                       
                include "searchfilter.as";
//фильтр

                        private function forw_clickHandler(event:MouseEvent):void
                        {
                        boxer.verticalScrollPosition += boxer.height;
                        frlistnum = frlistnum + 20;// по количеству отображаемых элементов
                    var u:int = arrColl.length - frlistnum;
                        if (u <= 20){
                                frwb.visible = false;
                               
                        }
                        if (frlistnum >= 19){
                                rvrb.visible = true;
                        }
                        }


                        protected function rev_clickHandler(event:MouseEvent):void
                        {
                                boxer.verticalScrollPosition -= boxer.height;
                                frlistnum = frlistnum - 20;
                                if (frlistnum <= 19){
                                        rvrb.visible = false;
                                }
                                if (frlistnum >= (arrColl.length - 29)){
                                        frwb.visible = true;
                                }                                                               
                        }

                ]]>
        </fx:Script>
        <fx:Declarations>
                <mx:ArrayCollection id="arrColl" source="{arr}" />
        </fx:Declarations>
       
        <s:Panel x="75" y="58" width="776" height="523" title="Друзья" backgroundColor="#D9FEF8">
               
                <s:DataGroup dataProvider="{arrColl}"
                                        width="754" height="400"
                                        clipAndEnableScrolling="true" itemRenderer="components.mir" x="10" y="42" id="boxer"
                                        >
                        <s:filters>
                                <s:DropShadowFilter id="myShadow"
                                                                        alpha="1"
                                                                        distance="7"
                                                                        angle="40"
                                                                        blurX="9"
                                                                        blurY="9"
                                                                        color="333333"
                                                                        quality="2"
                                                                        strength="1"
                                                                        />
                        </s:filters>
                        <s:layout>
                                <s:TileLayout verticalGap="20" horizontalGap="20"
                                                                  useVirtualLayout="true"/>
                               
                        </s:layout>
                </s:DataGroup>
                <s:BorderContainer x="10" y="10" width="310" height="24">
                        <mx:Image x="0" y="0" width="26" height="22" source="img/search.png" />
                        <s:TextInput x="27" y="1" id="textsearchf" borderVisible="false" change="filter()" enabled="true"
                                                focusIn="clearMyTextInput()" text="Начните вводить любое имя или фамилию" width="281"/>
                </s:BorderContainer>
                <mx:Button x="731" y="450" id="frwb" click="forw_clickHandler(event)" buttonMode="true" width="43" height="30" label="--&gt;" fontSize="17" fontWeight="bold"/>
                <s:Button x="691" y="450" id="rvrb" width="43" height="30" buttonMode="true" click="rev_clickHandler(event)" visible="false" label="&lt;--" fontSize="17" fontWeight="bold"/>
        </s:Panel>
</s:Application>

searchfilter.as
Код:

private function filter():void {
        arrColl.filterFunction = filterMyArrayCollection;
        arrColl.refresh();
}

private function filterMyArrayCollection(item:Object):Boolean {
        var searchString:String = textsearchf.text.toLowerCase();
        var itemName:String = ((item.label + item.sn) as String).toLowerCase();
        return itemName.indexOf(searchString) > -1;
}

private function clearMyTextInput():void {
        //sortCollection();
        if (firstTime == true )
        {
                textsearchf.text = "";
                firstTime = false;
        }
}

mir.mxml (itemrenderer)
Код:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
                                xmlns:s="library://ns.adobe.com/flex/spark"
                                xmlns:mx="library://ns.adobe.com/flex/mx"
                                >
        <s:filters>
                <s:DropShadowFilter id="myShadow"
                                                        alpha="1"
                                                        distance="7"
                                                        angle="40"
                                                        blurX="11"
                                                        blurY="11"
                                                        color="333333"
                                                        quality="3"
                                                        strength="1"
                                                        />
        </s:filters>
       
        <s:BorderContainer width="170"
                                          height="60"
                                          borderVisible="false"
                                          cornerRadius="8"
                                          buttonMode="true"
                                          rollOver="onm(event)"
                                          rollOut="onm1(event)"
                                          id ="box1"
                                          click="bordercontainer1_clickHandler(event)"
                                          creationComplete="onchange(event)">
                <fx:Script>
                        <![CDATA[
                                import mx.controls.Alert;
                                protected function onm(e:MouseEvent):void {
                                        e.currentTarget.alpha = 0.5;
                                       
                                }
                                protected function onm1(e:MouseEvent):void {
                                        e.currentTarget.alpha = 1;       
                                       
                                }
                               
                                protected function bordercontainer1_clickHandler(event:MouseEvent):void
                                {
                                        Alert.show(data.id);// доставать без карент таргет
                                }
                                public function onchange(event:Event):void{
                                        if(data.on == 1){
                                                onliner.visible=true;
                                        }
                                }
                               
                               
                        ]]>
                </fx:Script>
                <mx:Image width="60"
                                  height="60"
                                  source="http://www.ak-bars.ru/theme/img/noavatar.jpg"/>
                <s:Label fontWeight="bold"
                                text="{data.label}" paddingLeft="60" paddingTop="10"/>
                <s:Label fontWeight="bold" id="sn"
                                text="{data.sn}" paddingLeft="60" paddingTop="25"/>
                <mx:Box width="5" height="5" cornerRadius="20" x="140" y="5" id="onliner" borderVisible="false" backgroundColor="#006600"
                                                  visible="false" />

                       
                </s:BorderContainer>
               
</s:ItemRenderer>


Astraport 17.10.2011 22:29

sstotenkopf, что-то мне напоминает мои сегодняшние проблемы. Попробуй мое решение.

GBee 17.10.2011 22:49

Решение Astraporta подойдет, только диспатчить событие самому не надо по идее.

sstotenkopf 17.10.2011 22:53

а в какой момент оверрайдить? К сожалению не понял, что значит диспатчить

Добавлено через 16 минут
При чем эта проблема только с data.on, все остальные данные включая data.id отображаются нормально

GBee 18.10.2011 00:06

Цитата:

При чем эта проблема только с data.on, все остальные данные включая data.id отображаются нормально
Логично, у вас же на data забиндено.

Код AS3:

<mx:Box width="5" height="5" cornerRadius="20" x="140" y="5" id="onliner" borderVisible="false" backgroundColor="#006600" visible="{data.on == 1}" />

;о)

Цитата:

а в какой момент оверрайдить? К сожалению не понял, что значит диспатчить
По ссылке сходите Астрапорта.

sstotenkopf 18.10.2011 00:53

Код:

<mx:Box width="5" height="5" cornerRadius="20" x="140" y="5" id="onliner" borderVisible="false" backgroundColor="#006600" visible="{data.on == 1}" />
Спасибо! Все получилось, не думал, что таким образом можно заменить конструкцию if()...

GBee 18.10.2011 01:18

Цитата:

Спасибо! Все получилось, не думал, что таким образом можно заменить конструкцию if()...
А это не замена if, это логическая операция, возвращающая Boolean

sstotenkopf 18.10.2011 02:12

Об этом не знал тем более)


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

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