Форум 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"
				}
Вот как-то так. Так вот в такой ситуации надо передавать кроме самого обжекта еще и ид.
И это надо довольно-таки редко. Потому вводить ид в базовый класс ради парочки ситуаций неохота. Было бы удобно оверрайдить функцию автоапдейта и чтоб она еще и ид принимала и что-то там нахимичить. Но оверрайд соответственно должен быть клоном того что именно мы оверрайдим.

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

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

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

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


 


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


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