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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.12.2011, 19:29
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 11  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
С каких это пор?
А какой смысл в приватном сеттере?

Старый 20.12.2011, 19:37
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 12  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
А какой смысл в приватном сеттере?
Лично для меня как минимум в красоте описания.

Код AS3:
const megaRandomDO:MDO = new MDO ( randomVar )
private function get randomVar():int { return ... }
нежели
Код AS3:
new MDO ( _randomVar() )
- ну не красиво же........
Хотя это про геттер... а сеттер тоже хз где
__________________
Марк Tween

Старый 20.12.2011, 20:15
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 13  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
я не про _ , а вообще, так сказать в целом )
я сеттеры обычно использую только если нужно произвести какие-то проверки внутри кода сеттера. В других случаях заменяю из публичными переменными.
ну а приватный сеттер - это что-то бессмысленное, имхо

Старый 20.12.2011, 20:29
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 14  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
ну а приватный сеттер - это что-то бессмысленное, имхо
Но не невозможное
__________________
http://www.chessmax.ru

Старый 20.12.2011, 20:36
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 15  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Можно воспользоваться Proxy в качестве первого массива и диспатчить изменения, которые подхватит обертка второго массива.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.12.2011, 21:18
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 16  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Но не невозможное
Я и не говорил, что это невозможно.

Старый 20.12.2011, 21:36
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 17  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Приватный сеттер использовал пару раз. Необходимо было диспатчить событие изменение модели при изменении некоторого параметра, который изменялся из нескольких мест. Но наружу он не был виден (по событию читалось другое свойство)

Код AS3:
private function set param(value:Boolean):void {
    if ( this._param === value )
        return;
    this._param = value;
    super.dispatchEvent( new Event(Event.CHANGE) );
}
 
function methodOne():void {
    if (что-то)
        this.param = false;
}
 
 
function methodTwo():void {
    if (что-то)
        this.param = true;
}
 
function methodFour():void {
    if (что-то)
        this.param = false;
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.12.2011, 21:48
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 18  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от dimarik Посмотреть сообщение
Можно воспользоваться Proxy в качестве первого массива и диспатчить изменения, которые подхватит обертка второго массива.
Присоединяюсь

Или вот как еще можно:

При смене значения элемента одного массива он диспатчит событие о изменении значения элемента, это событие отлавливается и во 2м массиве меняется значение элемента с таким же индексом

Код AS3:
package com.CustomArray
{
	import com.CustomArray.events.CustomArrayEvent;
 
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
 
	dynamic public class CustomArray extends Array implements IEventDispatcher
	{
		private var dispatcher:EventDispatcher;
 
		public function CustomArray()
		{
			dispatcher = new EventDispatcher(this);
		}
 
		public function add(val:*):void
		{
			this.push(val);
			dispatchEvent(new CustomArrayEvent(CustomArrayEvent.COLLECTION_CHANGE));
		}
		public function update(val:*,index:int):void
		{
			this[index]=val;
			dispatchEvent(new CustomArrayEvent(CustomArrayEvent.COLLECTION_VALUE_CHANGE,{ind:index,value:val}));
		}
 
		/*
			iEventDispatcher Implementation
		*/
		public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
		{
			dispatcher.addEventListener(type, listener, useCapture, priority);
		}
 
		public function dispatchEvent(evt:Event):Boolean
		{
			return dispatcher.dispatchEvent(evt);
		}
 
		public function hasEventListener(type:String):Boolean
		{
			return dispatcher.hasEventListener(type);
		}
 
		public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
		{
			dispatcher.removeEventListener(type, listener, useCapture);
		}
 
		public function willTrigger(type:String):Boolean 
		{
			return dispatcher.willTrigger(type);
		}
	}
}
Код AS3:
package com.CustomArray.events
{
	import flash.events.Event;
 
	public class CustomArrayEvent extends Event
	{
		public var messageData:Object;
		public static const COLLECTION_CHANGE:String="collectionChange";
		public static const COLLECTION_VALUE_CHANGE:String="collectionValueChange";
 
		public function CustomArrayEvent(type:String, data:Object=null, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
			var messObj:Object=new Object();
			messObj.data=data;
			this.messageData=messObj;
		}
	}
}
Использование:
Код AS3:
package
{
	import com.CustomArray.CustomArray;
	import com.CustomArray.events.CustomArrayEvent;
 
	import flash.display.Sprite;
 
	public class ArrayProxyTest extends Sprite
	{
		protected var _array1:CustomArray=new CustomArray();
		protected var _array2:CustomArray=new CustomArray();
 
		public function ArrayProxyTest()
		{
			_array1.addEventListener(CustomArrayEvent.COLLECTION_VALUE_CHANGE,sourceArrayCollectionValueChangeHandler);
			_array1.addEventListener(CustomArrayEvent.COLLECTION_CHANGE,sourceArrayCollectionChangeHandler);
			_array1.add(1);
			_array1.add(2);
			_array1.add(3);
 
			_array1.update(45,2);
		}
 
		protected function sourceArrayCollectionChangeHandler(event:CustomArrayEvent):void
		{
			 _array2=_array1;
			 trace("\nCollectionChange\nARRAY 1: "+_array1);
			 trace("ARRAY 2: "+_array2);
		}
 
		protected function sourceArrayCollectionValueChangeHandler(event:CustomArrayEvent):void
		{
			_array2[event.messageData.index]=event.messageData.value; // смена значения элемента во 2м массиве
			trace("\nCollectionValueChange\nARRAY 1: "+_array1);
			trace("ARRAY 2: "+_array2);
		}
	}
}
трэйс:
Код:
CollectionChange
ARRAY 1: 1
ARRAY 2: 1

CollectionChange
ARRAY 1: 1,2
ARRAY 2: 1,2

CollectionChange
ARRAY 1: 1,2,3
ARRAY 2: 1,2,3

CollectionValueChange
ARRAY 1: 1,2,45
ARRAY 2: 1,2,45


Последний раз редактировалось djyamato; 20.12.2011 в 22:43.
Старый 20.12.2011, 21:50
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 19  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
ArrayList, ArrayCollection - мне кажется вам нужно что-то из этой области.
Если я правильно конечно понял.
Т.е. при изменении.удалении.добавлении не самого массива, а какого нибудь элемента массива - нужно получить событие.
__________________
Отряд Котовскага

Старый 20.12.2011, 21:50
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 20  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от goodguy Посмотреть сообщение
А какой смысл в приватном сеттере?
Да, сейчас оно уже смысла не имеет. Но, когда я создавал тему, я почему-то себе вбил в голову, что при изменении элемента приватного массива, можно изменить одновременно элемент под таким же индексом в другом приватном массиве.
__________________
Я мало чего умею, но зато хорошо умею учиться...

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

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

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


 


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


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