代码之家  ›  专栏  ›  技术社区  ›  Gideon

AdobeAIR for JS是否支持某种非持久性数据容器?

  •  0
  • Gideon  · 技术社区  · 17 年前

    目前,该项目相当小,包含一个登录部分和一个详细信息部分。

    我想做的是在应用程序启动时显示login.html,如果成功,则显示/浏览到details.html。

    我的问题是,是否有一些快速而肮脏的方法将我从登录名(如userid)收到的一些信息保存在会话/应用程序容器中?

    我简短地调查了他们的情况 BlackBookSafe blackbooksafe.html 始终打开,并将子页面加载到正文中,从而将会话数据保存在 blackbooksafe.html
    但在我看来,它造成了一种混乱,宁愿让每个页面都自行处理(javascript方面),这将使它更易于阅读。

    4 回复  |  直到 17 年前
        1
  •  1
  •   sn0gun    16 年前

    好吧,我知道这条线很旧,但如果它能帮助别人的话。

    我的解决方案感觉像是一个完全的黑客——对Adobe来说很丢脸——但它是有效的。

    将数据作为JSON字符串存储在菜单数据中

    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);
    

    该数据在应用程序关闭时消失,因此只有在应用程序打开时才会持久。

    注意:我是在Mac上写的,因此您必须调整用于windows/linux的NativeWindow.menu的代码。

        2
  •  0
  •   Gideon    17 年前

    我看到了一些黑客行为,比如将数据保存在文件上(Adobe的一个示例中使用),或者将其放入数据库,但我没有找到任何快速的非持久性数据存储。 我希望看到一个键/值字典连接到NativeApplication对象,在那里我可以添加我的非持久性数据,但它不存在。

    最后,我选择了IFRAME解决方案,父页面存储非持久性数据。

        3
  •  0
  •   dkretz    17 年前

    当然,web应用程序需要会话的原因是web页面不会打开持久连接。但是,在您的情况下,您可以求助于正常的持久连接资源,其中包括保持打开的数据库连接,并包括使用您正在使用的任何dbms连接解决方案的登录信息。出于您的目的,这应该完成web上使用的会话。


    编辑:
        4
  •  0
  •   James    17 年前

    为什么不创建一个常规对象:

    var storage = {};
    

    用法:

    storage.pswd = 'password';
    storage.user = 'username';
    // Retrieval:
    alert(storage.pswd);
    
    推荐文章