|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Цитата:
|
|
|||||
А я не стесняюсь работать напрямую с XML. (здесь названия элементов соответствуют id элементов на странице, и скрипт затем подставляет в них содержимое)
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Потихоньку дополз до реализации некоторых моментов, описанных уважаемым wolsh. Теперь прошу пояснить кое-что по мелочи.
Цитата:
Цитата:
и сохранит в статическую переменную, то в дальнейшем мы всегда сможем обратиться к этой переменной за фразой? Или нет? Цитата:
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
static public function activate():void { if (_activated) return; currentLanguage = FileManager.configXML.language; var languageFile:File = File.applicationDirectory.resolvePath("languages" + File.separator + currentLanguage + ".xml"); _currenLanguageXML = FileManager.getXML(languageFile).language[0]; //// FileManager загружает файл языка _labels = _currenLanguageXML.label; //// список ссылок на лейблы _activated = true; } static public function getLabel(code:String) : String { return _labels.(@id == code).text(); } <?xml version="1.0" encoding="utf-8" ?> <data> <language id="ENG" native="English"> <!--FileList Context Menu----> <label id="0500">Add to Bookmarks</label> <label id="0501">Copy the Name</label> <label id="0502">Copy the Link</label> <label id="0503">Copy the File</label> <label id="0504">Rename</label> <label id="0505">Delete</label> <label id="0506">Add Link</label> </language> </data>
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
рекомендую значения заворачивать в CDATA
__________________
RocketJump |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
Цитата:
И по коду вопросы: Просто защита от дурака или ещё какой-то смысл есть в этом? Не понял в этой конструкции .language[0] на конце... |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1.
static public function getText(file:File) : String { if (!file.exists) return null; var text:String; _stream.open(file, FileMode.READ); //// _stream это объект класса FileStream _stream.position = 0; text = _stream.readUTFBytes(_stream.bytesAvailable); _stream.close(); return text; } static public function getXML(file:File) : XML { var xml:XML = null; if (!file.exists) //// в системе нет заданного файла { //// ....выводится попап-окно с ошибкой "файл # не найден" return null; } //// валидация XML try { xml = XML(getText(file)); //// вызывается универсальная загрузка текстового файла getText() } catch (err:TypeError) { //// ....выводится попап-окно с ошибкой "файл # содержит ошибки форматирования" } return xml; } 3. FileManager.getXML(languageFile) возвращает объект XML. Далее идет синтаксис е4х: .language запускает поиск всех узлов language, и возвращает (внимание!) XMLList (в Adobe ж не знают, что узел language у меня один). Но мне нужен не XMLList, а просто один узел language в виде XML-документа. Поэтому из "всего" списка узлов language я беру первый (нулевой). То есть [0] это индекс узла в списке XMLList. Добавлено через 23 минуты Предвидя вопрос "а зачем тогда ты вообще делал такую структуру <data><language/></data>" отвечаю : всё просто, в ФАЙЛЕ может содержаться также информация, относящаяся только к файлу, а не к "языку": автор перевода, версия, дата и т.п. Это будут узлы одного уровня с <language/>.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Wolsh, большое спасибо. Если не возражаешь, возьму за основу в свой проект. У меня почему-то "не стоит" на все эти сервисные функции типа чтения файлов.
Цитата:
Вопрос у меня другой. Во всех книжках на загрузке файлов стабильно видел прикрученное событие, которое давало "отмашку", что файл загружен и с ним можно работать. Почему у тебя в файл-менеджере нет ничего подобного? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Потому что AIR позволяет открывать или сохранять файлы синхронно. То есть исполнение дальнейшего кода останавливается и ждет, пока операция выполнится. Поэтому события типа COMPLETE не нужны. Но при желании конечно можно работать асинхронно "по старинке", для этого тоже есть методы (и свои плюшки типа более полного контроля процесса с ловлей ошибок и событий).
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Друзья, пардон, здесь был ещё один нубский вопрос, но я разобрался сам.
Последний раз редактировалось Appleman; 14.10.2017 в 19:45. |
Часовой пояс GMT +4, время: 04:03. |
|
« Предыдущая тема | Следующая тема » |
|
|