怎样使用JavaScript存储Adobe AIR应用程序首选项

来源:互联网 发布:知乎我的收藏在哪里 编辑:程序博客网 时间:2024/06/03 22:57

 本文来自:

http://articles.sitepoint.com/article/adobe-air-pref-javascript

 

在我 之前的帖子里,  我激动地开始了我的第一个AIR应用,叫做Harpoon, 仅使用HTML, CSS, 和JavaScript。我当时没时间讨论的一个特点就是,你可以使用一个XML文件存储和检索应用程序首选项。

如果你已下载和安装Harpoon,你可能会注意到有选择列表的首选项面板。

下面是该域及其标贴的HTML:

 

如果你再调用,Harpoon就注定会成为Flippa 网站的拍卖监管程序。最后,它会根据你的查询,控制查询Flippa上新拍卖的频率。当然,你是希望Harpoon能够记住这一设置的。所以,让我们来存储XML文件的选定值吧!

我们的任务是:

· 当Harpoon被打开,我们检查是否有首选项文件;

· 如果没有,Harpoon应该创建文件,编写缺省值;

· 如果有,Harpoon应该读取首选项文件,设定域值;

· 一旦域值改变,Harpoon应该为首选项文件编写新的值。

实际上没有听上去这么复杂。我们来探究下,我好证实给你们看。

首先,对我们的Harpoon 对象进行些调整。(如果你需要激起你的回忆,那就先绕回到我前面的帖子)。我们想要在Harpoon 对象中存储重新获得的值,和其它几个重要的值:

我将讨论prefsFilestorePath,但是你也可以看到prefs 对象有个属性叫refresh。就是在这里我们存储重新获得的值,在我们的应用程序里,可从Harpoon.prefs.refresh读取该值。

现在,我们回到prefsFilestorePath属性。为安全起见,每个AIR应用程序都有自己的存储目录,在目录里,它可以读取和编写文件。我们的首选项文件就是放在这里。这两个属性会存储通往应用程序存储目录的路径和通往首选项文件的路径。

如果你记得在前面的帖子里,Harpoon有个初始化的init函数,在这里我们放置了对setupWindow函数的调用。我们在此基础之上增加几行代码:

 

我们使用air.File.applicationStorageDirectory 获取Harpoon的存储目录。然后,我们使用resolvePath 方法检索通往首选项文件prefs.xml的路径,把它做为文件对象存储。在下一行,Harpoon.getPrefs()是对我们将要编写的一个新函数的调用。

getPrefs 函数会从文件(如存在)检索应用程序首选项,否则它会创建一个新的文件。缺省首选项文件如下所示: 

 

下面是getPrefs 函数

首先,我们检查首选项文件是否存在,采用我们存储在init函数里的File 对象的属性(为便捷起见,命名为exists 属性)。如果该文件不存在,我们就采用你马上会看到的,一个名为readXML 的定制函数,来读取内容――基本上,要求有一个文件路径,返回XML文件:

if (Harpoon.prefsFile.exists) {
   var xml = Harpoon.readXML(Harpoon.prefsFile);

然后,使用jQuery选择工具,我们会在XML文件里发现第一个refresh元素,将其文本值作为integer存储在我们的Harpoon 对象里:

Harpoon.prefs.refresh = parseInt($(xml).find('refresh:eq(0)').text());

在jQuery :eq(index) 是一个选择器过滤器,根据索引与元素相配。在上面的代码里,refresh:eq(0) 与第一个refresh元素相配。

最后一步是:设定选定域的值,再次采用jQuery:

$('#pref_refresh option[value=' + Harpoon.prefs.refresh + ']').attr("selected","selected");

另外一方面,如果没有首选项文件,我们就要创建一个:

} else {
   Harpoon.savePrefs();
 }

savePrefs 函数使我们另外一个定制函数:

 

这是个简单的函数,创建一个字符串来代表XML标头,使用尚未看到的writeXML函数保存它到首选项文件。Harpoon.prefs.refresh 的现值被多列索引至XML字符串。你可能会注意到在上面的函数里使用了air.File.lineEnding ;它是一种属性,代表了Mac OS X, Windows, 和Linux上不同的平台分隔符。

现在我们来看这些命名为readXML 和writeXML 的函数。在Adobe AIR里,如果你想用JavaScript语言读取和编写文件,你需要使用FileStream 对象。首先,

readXML 文件创建一个新的FileStream 对象,从我们传递给它的File 对象中打开首选项文件(读模式)。FileStream 作为字符串被读取,存储在xml 变量里,然后被关闭。

下面,我们使用DOMParser 对象将字符串转换为XML文件,然后返回它:

writeXML函数也使用FileStream 对象,但是在读模式打开它。这个函数采用一个File 对象和XML源字符串,将字符串写入文件:

我们是不是忘记了什么?还有一个任务。当用户在界面里更改首选项的值时,我们需要Harpoon保存该首选项。所需要的仅仅就是一个简单的事件监听器;

 

每次选定列表值被改变时,上述代码与将被执行的函数绑定。函数存储一个新的首选项值,调用savePrefs 函数。我们将它添加到在第一个帖子里创建的setupWindow 函数上。

这就是了。在Adobe AIR应用里,使用JavaScript语言读取,并将首选项写入XML文件。非常简单!这个源代码如被打包了的应用程序一样可被下载。令人欣慰的是,它为你提供了足够的代码,使你能够在自己的AIR应用程序里执行首选项。

原创粉丝点击