В моей предыдущей статье я был очень рад запуску моего первого приложения AIR под названием Harpoon с использованием только HTML, CSS и JavaScript. Одной из особенностей, которую я не успел обсудить, было то, как вы можете использовать XML-файл для хранения и получения настроек приложения.
Если вы скачали и установили Harpoon, вы, возможно, заметили панель настроек со списком выбора.
Вот HTML-код для этого поля и его метки:
<label>Refresh every (minutes)</label>
<select id="pref_refresh" name="pref_refresh">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
...
<option value="10">10</option>
</select>
Если вы помните, Harpoon суждено стать приложением для просмотра аукционов на сайте Flippa . В конечном итоге это будет контролировать частоту проверки Flippa на новые аукционы, соответствующие вашему запросу. Конечно, вы хотите, чтобы Harpoon запомнил этот параметр, поэтому мы сохраним выбранное значение в файле XML.
Наша задача заключается в следующем:
- Когда гарпун открыт, мы проверяем, доступен ли файл настроек.
- Если недоступно, Гарпун должен создать файл и записать значение по умолчанию.
- Если доступно, Гарпун должен прочитать его и установить значение поля.
- Всякий раз, когда значение поля изменяется, Гарпун должен записать новое значение в файл настроек.
Это звучит намного сложнее, чем есть на самом деле. Давайте погрузимся, чтобы я мог показать вам.
Сначала некоторые изменения в нашем объекте Harpoon
(Если вам нужно подтолкнуть свою память, сделайте объезд и вернитесь к моей предыдущей статье .) Мы хотим сохранить значение обновления и пару других важных значений в объекте Harpoon
var Harpoon = {
...
prefsFile : null,
storePath : null,
prefs : {
refresh : 10
}
}
Я рассмотрю prefsFile
storePath
prefs
refresh
Здесь мы будем хранить значение обновления, и оно будет доступно в нашем приложении из Harpoon.prefs.refresh
Теперь вернемся к свойствам prefsFile
storePath
По соображениям безопасности каждому приложению AIR предоставляется собственный каталог хранения, из которого оно может читать и записывать файлы. Это где наш файл настроек будет находиться. Эти два свойства будут хранить путь к каталогу хранилища приложения и путь к файлу настроек.
Если вы помните из предыдущей статьи, у Harpoon есть функция инициализации для инициализации, где мы поместили этот вызов в функцию init
Мы добавим несколько строк кода к этому:
setupWindow
Мы используем init : function() {
Затем мы используем метод
Harpoon.setupWindow();
Harpoon.storePath = air.File.applicationStorageDirectory;
Harpoon.prefsFile = Harpoon.storePath.resolvePath("prefs.xml");
Harpoon.getPrefs();
...
},air.File.applicationStorageDirectory
resolvePath
prefs.xml
Следующая строка, File
Функция Harpoon.getPrefs()
Файл настроек по умолчанию будет выглядеть так:
getPrefs
Вот функция <?xml version="1.0" encoding="utf-8"?>
<preferences>
<refresh>10</refresh>
</preferences>
getPrefs
Сначала мы проверяем, существует ли файл предпочтений, используя удобно именуемое свойство getPrefs : function() {
if (Harpoon.prefsFile.exists) {
...
} else {
...
}
},exists
File
Если он существует, то мы читаем содержимое, используя пользовательскую функцию, которую вы увидите через init
readXML
Затем мы находим первый элемент if (Harpoon.prefsFile.exists) {
var xml = Harpoon.readXML(Harpoon.prefsFile);refresh
Harpoon
В jQuery Harpoon.prefs.refresh = parseInt($(xml).find('refresh:eq(0)').text());
В приведенном выше коде :eq(index)
refresh:eq(0)
Последний шаг в этой ветви — установить значение поля select, снова используя jQuery:
refresh
С другой стороны, если нет файла настроек, мы хотим создать его:
$('#pref_refresh option[value=' + Harpoon.prefs.refresh + ']').attr("selected","selected");
Функция } else {
Harpoon.savePrefs();
}
savePrefs
Это простая функция, которая создает строку, представляющую теги XML, и сохраняет ее в файле настроек с помощью пока невидимой функции savePrefs : function() {
Текущее значение
var cr = air.File.lineEnding;
var prefsXML = '<?xml version="1.0" encoding="utf-8"?>' + cr
+ '<preferences>' + cr
+ ' <refresh>' + Harpoon.prefs.refresh + "</refresh>" + cr
+ '</preferences>';
Harpoon.writeXML(Harpoon.prefsFile, prefsXML);
},writeXML
Вы можете заметить использование Harpoon.prefs.refresh
это свойство представляет символ конца строки на платформе, который отличается в Mac OS X, Windows и Linux.
Теперь о тех air.File.lineEnding
readXML
writeXML
В Adobe AIR, если вы хотите читать и записывать файлы в JavaScript, вам нужно использовать объект FileStream
Сначала файл readXML
FileStream
File
FileStream
xml
readXML : function(path) {
var stream = new air.FileStream();
stream.open(path, air.FileMode.READ);
var xml = stream.readUTFBytes(stream.bytesAvailable);
stream.close();
Далее мы используем объектDOMParser
var domParser = new DOMParser();
xml = domParser.parseFromString(xml, "text/xml");
return xml;
},Функция
writeXML
FileStream
Эта функция принимает объектFile
writeXML : function(path, xml) {
var stream = new air.FileStream();
stream.open(path, air.FileMode.WRITE);
stream.writeUTFBytes(xml);
stream.close();
},Мы что-нибудь забыли? Есть еще одна задача. Когда пользователь изменяет значение предпочтения в интерфейсе, мы хотим, чтобы Гарпун сохранил это предпочтение. Все, что нужно, это простой прослушиватель событий:
$('#pref_refresh').change(function(){
Harpoon.prefs.refresh = this.options[this.selectedIndex].value;
Harpoon.savePrefs();
});Приведенный выше код связывает функцию, которая будет выполняться каждый раз, когда изменяется значение списка выбора. Функция сохраняет новое значение предпочтения и вызывает функцию
savePrefs
Мы добавим это к функцииsetupWindow
И там у нас это есть. Чтение и запись настроек в файл XML с использованием JavaScript в приложении Adobe AIR: просто! Исходный код может быть загружен, а также упакованное приложение . Надеемся, что этого было достаточно для того, чтобы вы могли реализовать настройки в своем приложении AIR.