Поддерживает ли Adobe AIR for JS какой-то вид непостоянного контейнера данных? - PullRequest
0 голосов
/ 30 марта 2009

Для проекта, в котором мне нужно разработать приложение в Adobe AIR, я выбираю версию HTML / Ajax. На данный момент проект довольно маленький, и содержит часть входа в систему и часть деталей.

Что я хотел бы сделать, так это запустить приложение show login.html и, если это было успешно, show / browse-to details.html.

У меня вопрос, есть ли какой-нибудь быстрый и грязный способ сохранить некоторую информацию, полученную от логина (например, идентификатор пользователя), в контейнере сеанса / приложения?

Я кратко рассмотрел их BlackBookSafe пример, но то, что я увидел, это то, что, хотя есть несколько страниц, они фактически постоянно открывают blackbooksafe.html и загружают дочерние страницы в тело, таким образом сохраняя данные сеанса в blackbooksafe.html
Но, на мой взгляд, это создает беспорядок, и, скорее всего, каждая страница позаботится о себе (с точки зрения javascript), что облегчит чтение.

Ответы [ 4 ]

1 голос
/ 14 сентября 2010

Хорошо, я понимаю, что эта ветка СТАРАЯ, но если она кому-то поможет.

Мое решение похоже на полный взлом - позор для Adobe - но оно работает.

Сохранить данные в виде строк JSON в меню данных

Меню сохраняются при загрузке страницы, и вы можете назначить пользовательские данные меню. До сих пор, похоже, нравятся только простые типы данных, такие как строки или целые числа. Поэтому решение состоит в том, чтобы загрузить json2.js (http://json.org) и использовать его команды stringify() и parse(), чтобы преобразовать состояние вашего приложения в строку JSON, а затем сохранить его в элементе .data меню.

Я сохранил его в первом меню. в списке items.
Используя jQuery, мой код приложения выглядел так:


function InitApp() {
    // check before we create the menu for the very first time.
    var menu = air.NativeApplication.nativeApplication.menu;
    var firstMenu = menu.items[0];
    var dataStore = firstMenu.data;
    if (dataStore == null) {
        air.trace("Create Menu Data Store");
        var dataObj = { 
            msg: "Message Object",
            status: 1 
        };
        var dataObjStr = JSON.stringify(dataObj);
        firstMenu.data = dataObjStr;
        dataStore = firstMenu.data;
        air.trace("Created menu data store");
        air.trace(dataObjStr);
    } else {
        var dataStore = firstMenu.data;
        var obj = JSON.parse(dataStore);
        air.trace("Retrieved Menu Data Store");
        air.trace(obj.msg);
    }

    BuildMenu();
    // check after we create our menu
    firstMenu = air.NativeApplication.nativeApplication.menu.items[0];
    firstMenu.data = dataStore; // pass it along.

}

$(document).ready(InitApp);

Эти данные исчезают при закрытии приложения, поэтому они сохраняются только при открытом приложении.

Реальным ответом было бы для nativeApplication поддерживать ТОЧНУЮ ЖЕ ФУНКЦИЮ в качестве меню!

Примечание. Я написал это на Mac, поэтому вам придется настроить код для использования NativeWindow.menu для windows / linux.

0 голосов
/ 31 марта 2009

Поскольку вы используете AIR, я предполагаю, что это не веб-приложение.

Причина, по которой сеансы необходимы для веб-приложений, заключается в том, что веб-страницы не открывают постоянные соединения. Однако в вашем случае вы прибегаете к обычным постоянным ресурсам соединений, которые включают в себя соединения с базой данных, которые остаются открытыми, и включают информацию для входа в систему с использованием любого решения для соединения с DBMS, которое вы используете. Для ваших целей это должно соответствовать тому, для чего используются сеансы в Интернете.

Или вы можете использовать одноэлементный класс Users. который остается открытым в течение срока действия заявки.


EDIT:
0 голосов
/ 01 апреля 2009

Почему бы просто не создать обычный объект:

var storage = {};

Использование:

storage.pswd = 'password';
storage.user = 'username';
// Retrieval:
alert(storage.pswd);
0 голосов
/ 31 марта 2009

Я видел несколько хаков, таких как сохранение данных в файл (использованный в одном из примеров Adobe) или помещение их в базу данных, но я не нашел быстрого непостоянного хранилища данных. Мне бы очень хотелось, чтобы словарь ключ / значение был подключен к объекту NativeApplication, где я мог бы добавить свои непостоянные данные, но их нет.

В конце концов я выбрал решение IFRAME, где на родительской странице хранятся непостоянные данные.

...