![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Короче запилил гломурную систему автообновления моделей при получении данных с сервера.
Строится дерево моделей, данные плюются в корневую и она рекурсивно обновляет всё что внутри нее. /** * Пропихивает данные полученные с сервера по веткам моделей. * @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"
}
}
}
Пихаем вот это: "3ce5ab7aa4674235ab36f857f5f2227d":// Вот этот кусок, тобишь ид как таковой мы в принимаемом обжекте не видим
{// а видим только его значение.
"ingame":"36e0e36b-d404-4178-9979-daf6cf1a5a69"
}
И это надо довольно-таки редко. Потому вводить ид в базовый класс ради парочки ситуаций неохота. Было бы удобно оверрайдить функцию автоапдейта и чтоб она еще и ид принимала и что-то там нахимичить. Но оверрайд соответственно должен быть клоном того что именно мы оверрайдим. Пока что не вижу решений кроме как задать какой-то дефолтный ид даже там где его не надо, и чтоб и дальше автоматом делалось так как сейчас делается.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Спасибо Кеп. Я об этом писал:
Цитата:
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
То что вы хотите называется перегрузкой методов, и в AS3 такого нет. Можно ещё выкрутиться так:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 01:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|