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

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

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

Регистрация: Feb 2011
Сообщений: 42
По умолчанию Как быть без структур?

Доброго времени.
Вопрос вот какой - нужно сделать файл (класс) с настройками для всего приложения.
При этом хочу, чтобы обращение к настройкам в итоге выглядело так:
Код AS3:
value = Preferences.preferencesGroup1.someValue;
То есть, чтобы в классе были группы настроек для каждого компонента в программе. Настройки какой-то панельки, например. А группа уже должна содержать все нужные значения - цвет панельки, размер и т.д.

Если бы в AS были структуры, можно было бы сделать статическую структуру для каждой группы, со всеми нужными значениями. А без этого не знаю, как написать. Вложенных классов нет. Можно было бы сделать пакет с настройками и создавать по отдельному классу для каждой группы, но это чересчур. Я хочу, чтобы всё было в одном файле, с intelliSense, все дела... Есть какое-то простое решение?

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
public static var preferencesGroup1:Object = {
    someValue1: someValue,
    someValue2: someValue,
    ...
}
__________________
тут я

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Код AS3:
package  
{
	public class Preferences 
	{
		public static var preferencesGroup1:XML= 
		<preferencesGroup1>
			<someValue>123</someValue>
		</preferencesGroup1>;		
	}
}


Последний раз редактировалось mikhailk; 07.05.2011 в 18:10.
Старый 07.05.2011, 18:22
Sharkow вне форума Посмотреть профиль Отправить личное сообщение для Sharkow Найти все сообщения от Sharkow
  № 4  
Ответить с цитированием
Sharkow
 
Аватар для Sharkow

Регистрация: Feb 2011
Сообщений: 42
Спасибо, но вот не зря написал про intelliSense. В этих случаях компилятор уже не видит, какие значения есть в объекте/узлы в XML. Придется без этого жить?

IntelliSense - это я про Code Completion.


Последний раз редактировалось Sharkow; 07.05.2011 в 18:26.
Старый 07.05.2011, 18:26
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 5  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Вложенных классов нет
Цитата:
Можно было бы сделать пакет с настройками и создавать по отдельному классу для каждой группы, но это чересчур
А какая разница - будут они вложенными, или нет? Экономите место на жестком диске? =)
Тем более, что если говорить о C++, то не особо-то классы отличаются от структур.

ЗЫ
Насчет вложенных классов: Вы можете объявить несколько классов в одном AS файле, единственное НО состоит в том, что только один из этих классов может быть объявлен как public, остальные должны быть internal (или вообще без модификатора доступа, что по сути одно и то же).

Так что единственный способ работать с intelly sense - это плодить кучу классов, в одном или нескольких файлах
__________________
...вселенская грусть

Старый 07.05.2011, 18:52
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Если бы в AS были структуры, можно было бы сделать статическую структуру для каждой группы, со всеми нужными значениями. А без этого не знаю, как написать. Вложенных классов нет. Можно было бы сделать пакет с настройками и создавать по отдельному классу для каждой группы, но это чересчур. Я хочу, чтобы всё было в одном файле, с intelliSense, все дела... Есть какое-то простое решение?
Ну раз структура нужна статическая, какая разница будет она классом или структорой? И чем таким объявление класса в AS3 тяжелее объявления структуры в C++?
Код AS3:
package  
{
	public class Preferences 
	{
		public static const preferencesGroup1:ReferenceGroup1 = new ReferenceGroup1();
 
		public static const preferencesGroup1:ReferenceGroup2 = new ReferenceGroup2();
	}
 
}
 
class ReferenceGroup1
{
	public var color:uint;
 
	public var indent:int;
}
 
class ReferenceGroup2
{
	public var color:uint;
 
	public var indent:int;
}
Цитата:
Настройки какой-то панельки, например. А группа уже должна содержать все нужные значения - цвет панельки, размер и т.д.
Чем панельки настраивать и плодить кучу копипасты по всему приложению с кодом их создания, может оказаться проще влепить статичные фабрики этих панелек (подход ни разу не правильный - все оказывается завязано на фабрику, но компонентам, которые впринципе нельзя использовать вне приложения можно разрешить пользоваться этой фабрикой):

Код AS3:
package  
{
	public class PanelFactory
	{
		public static function newDefaultPanel():PanelBase
                {
                        var panel:CustomizedPanel = new CustomizedPanel();
                        panel.bgColor = 0xff00ff;
                        panel.borderColor = 0xff0000;
                        ...
                        return panel;
                 }
 
		public static function newDialogPanel():PanelBase
                {
                        var panel:CustomizedPanel = new CustomizedPanel();
                        panel.bgColor = 0xff0000;
                        ...
                        return panel;
                 }
 
                 public static function newButifulPanel():PanelBase
                {
                        var panel:ExtendedCustomizedPanel = new ExtendedCustomizedPanel();
                        panel.bgColor = 0xffffff;
                        ...
                        return panel;
                 }
	}
 
}


Последний раз редактировалось expl; 07.05.2011 в 19:00.
Старый 07.05.2011, 18:54
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
@expl
А у Вас при таком раскладе автокомплит показывает поля вложенных классов? у меня в FD - нет (да по идее и не должен нигде, кроме как внутри пакета с классом настроек). Та что я бы отдельными файлами делал
__________________
...вселенская грусть

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

Регистрация: Feb 2011
Сообщений: 42
gloomyBrain,
А да, в одном файле объявить несколько классов - это вполне подходит, только вот как сделать доступ к этим классам?
Код AS3:
package GalleryDraftPack
{
	public class SHPreferences{
		public static function get group1():Class{
			return Group1;
		}
	}
}
 
internal class Group1{
	public static const...
}
Так, разумеется, не работает ни Code Completion, ни собственно программа, никому же извне не известно о классе Group1.

Цитата:
А какая разница - будут они вложенными, или нет? Экономите место на жестком диске? =)
Все настройки, по хорошему, должны быть в одном файле, а то и искать, и переносить как-то неудобно.

expl,
Во-первых, да, при Вашем подходе автокомплит работать не будет, а во-вторых, new тут совсем не к месту. Разве что синглтон делать...

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


Последний раз редактировалось Sharkow; 07.05.2011 в 19:06.
Старый 07.05.2011, 19:07
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 9  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
@expl
А у Вас при таком раскладе автокомплит показывает поля вложенных классов? у меня в FD - нет (да по идее и не должен нигде, кроме как внутри пакета с классом настроек). Та что я бы отдельными файлами делал
Да, в FD вызывается, в FB не пробовал.

Цитата:
Во-первых, да, при Вашем подходе автокомплит работать не будет, а во-вторых, new тут совсем не к месту. Разве что синглтон делать...
1. Еще раз, автокомплит работает.
Название: autocomplite.PNG
Просмотров: 250

Размер: 12.1 Кб
2. Синглтон? Зачем? Этот класс и так никто вне Preferences не сможет создать. Да и зачем ему быть одному? Вдруг у вас будут 2 или более групп с одинаковыми настройками?

Цитата:
public static function get group1():Class{
return Group1;
}
Клиенту настроек, я так понимаю нужны сами настройки на не класс, по которым они будут создавать свою личную группу настроек, или задумка сложнее чем просто набить одну точку доступа полями настроек с иерархической структурой?


Последний раз редактировалось expl; 07.05.2011 в 19:17.
Старый 07.05.2011, 19:11
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 10  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Все настройки, по хорошему, должны быть в одном файле, а то и искать, и переносить как-то неудобно.
Одним пакетом тоже неудобно?
Что мешает сделать пакет Preferences, а preferencesGroup1 - классом со статическими переменными в нем? И автокомплит работает. И преносить каталогом.

Добавлено через 6 минут
Цитата:
Да, в FD вызывается, в FB не пробовал.
Вообще-то, да. Вариант от expl рабочий. Автокомплит работает и файл один.

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

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

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


 


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


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