Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.10.2011, 19:08
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 1  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
По умолчанию 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>

Старый 17.10.2011, 22:29
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 2  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
sstotenkopf, что-то мне напоминает мои сегодняшние проблемы. Попробуй мое решение.

Старый 17.10.2011, 22:49
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 3  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Решение Astraporta подойдет, только диспатчить событие самому не надо по идее.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 17.10.2011, 22:53
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 4  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
а в какой момент оверрайдить? К сожалению не понял, что значит диспатчить

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

Старый 18.10.2011, 00:06
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 5  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
При чем эта проблема только с 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}" />
;о)

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

Старый 18.10.2011, 00:53
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 6  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

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


Последний раз редактировалось sstotenkopf; 18.10.2011 в 01:01.
Старый 18.10.2011, 01:18
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Спасибо! Все получилось, не думал, что таким образом можно заменить конструкцию if()...
А это не замена if, это логическая операция, возвращающая Boolean
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 18.10.2011, 02:12
sstotenkopf вне форума Посмотреть профиль Отправить личное сообщение для sstotenkopf Найти все сообщения от sstotenkopf
  № 8  
Ответить с цитированием
sstotenkopf
 
Аватар для sstotenkopf

Регистрация: Aug 2010
Адрес: Саратов
Сообщений: 185
Об этом не знал тем более)

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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