sstotenkopf
17.10.2011, 19:08
Вообщем не могу понять логику, почему это происходит. Есть 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="-->" 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="<--" 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>
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="-->" 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="<--" 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>