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

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

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
По умолчанию Можно ли как-то в оверрайде изменить кол-во принимаемых параметров функции?

Короче запилил гломурную систему автообновления моделей при получении данных с сервера.
Строится дерево моделей, данные плюются в корневую и она рекурсивно обновляет всё что внутри нее.

Код AS3:
		/**
		 * Пропихивает данные полученные с сервера по веткам моделей.
		 * @param data
		 */
		protected function updateData(data:Object):void
		{
			for (var key:String in data) // проходим по каждому ключу данных
			{
				if (_data.hasOwnProperty(key)) // если в дате есть такой ключ
				{
					if (_data[key] is BaseDataModel) // и если этот ключ является BaseDataModel
					{
						_data[key].updateData.call(this, data[key]) // значит в нем должен быть метод автоапдейта. Запускаем его
					}
					else
					{
						_data[key] = data[key]; // Иначе данные принимаем за базовый тип и просто приравниваем
					}
				}
				else // если же такого ключа нету
				{
					updateNoKey(key, data[key]); // то запускаем функцию занимающуюся обновлением без ключей.
				}
 
				update(key); // Кричим во вьюху что изменили параметр.
			}
		}
 
		/**
		 * Оверрайдим там где надо.
		 * @param	 key
		 * @param	 data
		 */
		protected function updateNoKey(key:Object, data:Object):void 
		{
			trace(key);
			_data[key] = data;
		}
Вот как-то так.
Не конает только в том случае если данные вот здесь: updateData(data:Object) являются одним параметром из словаря по иду.

Ну т.е. вот словарь:
Код:
{
	"users":
		{
			"bdc2f7d3e41640da8c66722641387b3e":
				{
					"ingame":"36e0e36b-d404-4178-9979-daf6cf1a5a69"
				},
			"f44f40619a8f4865972ac5df06387aef":
				{
					"ingame":false
				},
			"3ce5ab7aa4674235ab36f857f5f2227d":
				{
					"ingame":"36e0e36b-d404-4178-9979-daf6cf1a5a69"
				}
		}
		
}
А вот сюда: updateData(data:Object)
Пихаем вот это:
Код:
			"3ce5ab7aa4674235ab36f857f5f2227d":// Вот этот кусок, тобишь ид как таковой мы в принимаемом обжекте не видим
				{// а видим только его значение.
					"ingame":"36e0e36b-d404-4178-9979-daf6cf1a5a69"
				}
Вот как-то так. Так вот в такой ситуации надо передавать кроме самого обжекта еще и ид.
И это надо довольно-таки редко. Потому вводить ид в базовый класс ради парочки ситуаций неохота. Было бы удобно оверрайдить функцию автоапдейта и чтоб она еще и ид принимала и что-то там нахимичить. Но оверрайд соответственно должен быть клоном того что именно мы оверрайдим.

Пока что не вижу решений кроме как задать какой-то дефолтный ид даже там где его не надо, и чтоб и дальше автоматом делалось так как сейчас делается.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
Код AS3:
protected function updateData(data:Object, id:*=""):void
и оверрайди сколько угодно

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Спасибо Кеп. Я об этом писал:
Цитата:
Пока что не вижу решений кроме как задать какой-то дефолтный ид даже там где его не надо
З.Ы. Задачу эту уже решил другим образом, но вопрос остается в силе.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
То что вы хотите называется перегрузкой методов, и в AS3 такого нет. Можно ещё выкрутиться так:
Код AS3:
manyParams("a");
manyParams("a","b");
//...
private function manyParams (... args): void {
	for each (var p:Object in args) {
		trace (p);
	}
}

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Хм. Спасибо, про ...args забыл что-то.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

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

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


 


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


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