23.9.使用File System控件

23.9.1.问题
我想添加控件用于浏览和显示文件系统特定目录下的内容。
23.9.2.解决办法
使用SDK的文件系统控件。
23.9.3.讨论
Flex 3 SDK的AIR API提供了很多控件方便浏览电脑文件系统的目录。这些控件只可用在AIR程序中,是由Framework的基于列表的组件组合而成。如Tree, List, 和DataGrid。虽然这些文件系统控件的外观和交互和Flex组件复本是一样的,但是这些控件的数据内容是由directory属性提供而非传统的dataProvider属性。

下面的例子使用FileSystemComboBox和FileSystemList组件浏览和显示计算机文件系统:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="verticalwindowComplete="initHandler();">

<mx:Script>
<![CDATA[
import mx.events.FileEvent;
private function initHandler():void {
fileCB.directory = File.documentsDirectory;
}
private function changeHandler(e:FileEvent):void {
trace (e.file.nativePath);
}

]]>
</mx:Script>
<mx:FileSystemComboBox id="fileCBdirectory="{fileList.directory}"
directoryChange="changeHandler(event);" />

<mx:FileSystemList id="fileListdirectory="{fileCB.directory}" />
</mx:WindowedApplication>

当点击mx.controls.FileSystemComboBox控件的下拉按钮时会显示目录的层级结构,程序载入初始化布局完成后,组合框初始目录为用户的文档目录,如果你点击下拉按钮,你会看到整个目录的层级结构。不过FileSystemComboBox并没有显示文档目录的所有子目录,比选中的目录层级还低的目录是不会被显示的。

在这个例子中,当FileSystemComboBox控件选中一个目录时,这个目录的内容就会在FileSystemList控件中显示出来,并且changeHandler方法被调用directoryChange事件传递的事件对象是FileEvent对象。FileEvent对象的file属性指出当前选中的目录,且目录路径被打印到控制台。FileSystemComboBox 和FileSystemList的directory属性进行双向绑定,当前目录发生变化时每个组件都会被更新。

除了可显示隐藏文件和特定扩展名文件外,FileSystemList类还有些属性用于浏览历史记录,你可以使用FileSystemHistoryButton类启动历史记录导航功能。

下面的例子使用FileSystemHistoryButton组件来轻松导航到以前选择过的目录:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:HBox width="100%">
<mx:FileSystemHistoryButton label="BackdataProvider="{fileList.backHistory}"
enabled="{fileList.canNavigateBack}click="fileList.navigateBack();"
itemClick="fileList.navigateBack(event.index)"/>

<mx:FileSystemHistoryButton label="ForwarddataProvider="{fileList.forwardHistory}"
enabled="{fileList.canNavigateForward}click="fileList.navigateForward();"
itemClick="fileList.navigateForward(event.index)"/>

</mx:HBox>
<mx:FileSystemList id="fileListwidth="100%height="250directory="{File.documentsDirectory}"/>
</mx:WindowedApplication>

每个历史按钮的data provider是之前选择过的目录,一个File对象数组。FileSystemList有内部的管理方法更新backHistory, forwardHistory, canNavigateBack, 和canNavigateForward 属性。

你可以从FileSystemHistoryButton 组件的下拉按钮中选择FileSystemList 中特定的目录。

FileSystemHistoryButton 的itemClick事件触发的对象实例是一个MenuEvent。你可以使用事件对象的index属性进行浏览历史定位以及更新FileSystemList组件的目录显示列表。

虽然FileSystemList控件可显示指定目录下的文件和目录,但是它不能显示目录在文件系统中的层级关系。这个就要通过FileSystemTree控件来做了。FileSystemTree类可以指示是否显示隐藏文件以及特定扩展名的文件。File对象只表示目录,还有其他过滤选项以及如何自定义浏览和导航目录。FileSystemTree组件相关事件有directoryClosing,directoryOpening事件和directoryChange事件。

下面的例子使用FileStream类显示文件系统根目录:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:FileSystemTree id="fileTreewidth="100%height="100%directory="{FileSystemTree.COMPUTER}" />
</mx:WindowedApplication>

FileSystemTree 控件可以很方便的从目录层级中浏览目录。FileSystemTree组件显示的每一项标签是文件或目录的名称。要想显示文件或目录的更多信息,就需要FileSystemDataGrid类。

FileSystemDataGrid控件通过DataGridColumn实例自动显示文件名,类型,大小,创建时间,修改时间。使用FileSystemDataGrid 控件, 双击某一项浏览目录。下面的例子使用FileSystemDataGrid控件浏览文件系统的桌面目录:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:FileSystemDataGrid id="fileGridwidth="100%height="100%directory="{File.desktopDirectory}" />
</mx:WindowedApplication>

双击某一项就会刷新列表显示被选择目录下的文件和目录。这个动作会导致进入目录并显示其内容,但是组件并没有提供其他控件使用户返回到先前的目录。和FileSystemList一样,FileSystemDataGrid内部管理着浏览历史记录,你仍可以使用FileSystemHistoryButton类浏览历史记录。

使用AIR API的文件系统控件可方便的浏览计算机文件系统。但是需要注意的是AIR并不会对文件系统通知做出反应,也就是说如果文件和目录被删除,则AIR控件不会自动刷新。要确保不会对已删除的文件和目录进行操作,记得先调用FileSystemList, FileSystemTree, 和FileSystemDataGrid控件的refresh方法。

加支付宝好友偷能量挖...


评论(0)网络
阅读(163)喜欢(0)flash/flex/fcs/AIR