65.9K
CodeProject 正在变化。 阅读更多。
Home

FEx - 文件浏览器小部件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (14投票s)

2015年2月1日

CPOL

3分钟阅读

viewsIcon

29694

downloadIcon

871

jQuery - 文件管理小部件。

引言

FEx (文件浏览器) 是一个简单的 jQuery 控件,用于文档管理。它具有以下功能:

  • 简单且易于自定义
  • 轻量级且由 JSON 驱动
  • 适用于手机和平板电脑
  • 轻松管理文件
  • MVC 就绪

此控件包含三个部分,即目录/文件夹部分 (I),文件夹/文档部分 (II),以及文档详情部分 (III)。II 部分的数据取决于 I 部分的选择,而 III 部分则取决于 II 部分的选择。

我们将探讨如何在 ASP.NET MVC 中实现它。

Using the Code

控件提供的选项如下:

创建基本控件

filesSrc 接受返回 JSON 文件列表的源 URL。data 是要传递给该操作的参数。rootPath 是文件目录的根路径。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/"
});

设置日期格式

可以使用 format 选项设置显示的日期格式。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   dateFormat: "d/mm/yy"
});

设置文件管理操作

使用 FEx,我们可以执行各种文件管理活动,例如**重命名**、**移动**、**新建文件夹**、**删除**和**添加文件**。

重命名

可以通过在目录字段中选择文件夹,或者在文件夹字段中选择文件/文件夹,然后单击**重命名**菜单来重命名文件。文件夹字段的选择具有优先权。**Esc** 键可取消操作。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   updateAction: {
   renameUrl: "/FExDemo/UpdateFolder"
   }
});
新建文件夹

可以在根目录或特定文件夹中创建新文件夹,只需选择相应的位置即可。如果未选择任何位置,则将在目录中创建文件夹。**Esc** 键可取消操作。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   updateAction: {
   createFolderUrl: '/FExDemo/UpdateFolder',}
});
删除

可以使用**删除**菜单选项删除文件或文件夹。这与**新建文件夹**的选择模式类似。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   updateAction: {
   deleteUrl: '/FExDemo/UpdateFolder',
   },
});
移动

文件或文件夹可以移动到特定文件夹。**移动**功能以**拖放**方式实现。目标可以是同一目录或不同目录。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   updateAction: {
   moveUrl: '/FExDemo/UpdateFolder'
   }
});
添加文件

可以使用**添加文件**菜单选项将文件添加到选定的文件夹中。也可以通过拖放方式添加文件。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   updateAction: {
   moveUrl: '/FExDemo/UpdateFolder'
   }
});

处理程序

加载前处理程序 (On Load Start Handler)

此处理程序对于通过 AJAX post 进行数据绑定/修改非常有用。它有一个参数,即 FEx 的**options**。

加载后处理程序 (On Load End Handler)

在数据从服务器返回后,将调用此处理程序。它有一个参数,即来自服务器的记录。

验证数据处理程序 (Validate Data Handler)

在目录/文件夹部分单击文件夹后,将调用此处理程序。

文档信息处理程序 (Document Info Handler)

在文件夹/文档网格中选择文档/文件夹后,将调用此处理程序。它接受三个参数:htmlobjectselected itemoptions。通过 htmlObject,我们可以修改该部分的内容。

操作开始处理程序 (On Action Start Handler)

在 FEx 中执行**更新**/**重命名**/**移动**/**新建文件夹**/**添加新文件**时,将调用此事件。它提供要 post 的**数据**以及要执行的**操作类型**。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   updateAction: {
     renameUrl: '/FExDemo/UpdateFolder',
     deleteUrl: '/FExDemo/UpdateFolder',
     moveUrl: '/FExDemo/UpdateFolder',
     createFolderUrl: '/FExDemo/UpdateFolder',
     addFile: '/FExDemo/SaveFile'
   },
   validateGridData: function (records) {
                    ////return the modified records
   },
    onLoadStart: function (options) {
                    ////return the modified options
                },
    onLoadEnd: function (records) {
                    ////return the modified records
                },
    documentInfoHandler: function (options,selectedData, htmlObject) {
                    ////return the modified htmlObject
                },
    onActionStart: function (actionType, postData) {
                    ////return the modified postData 
    },
});

移动/平板电脑兼容性

控件的布局会根据屏幕分辨率而变化。目前,FEx 的 CSS 中有一个断点(大于/小于 720px)。可以根据需要进行自定义。

自定义网格

文件夹部分中的网格可以使用 gridTemplate 进行自定义。此对象接受我们要绑定的 entityName、要显示的 title 以及 updatable 列。

$('#myContainer').FEx({
                filesSrc: "/FExDemo/GetFolderTree",
                data: { path: "F:/" },
                rootPath: "F:/",                
                gridTemplate: {
                    Format: {
                        title:"File Type"
                    },
                     Name: {
                        title: "Name",updatable:true
                    },
                    LastModifiedDate: {
                        title: "Modified Date",
                        format:true
                    }
                } });

排序

文件夹/目录排序

文件夹排序将通过**目录**部分顶部的**按...排序**菜单选项完成。我们可以使用 **directorySort** 模板设置可排序项。

$("#myContainer").FEx({ 
   filesSrc: "/FExDemo/GetFolderTree",
   data: { path: "F:/" },
   rootPath: "F:/",
   directorySort: {
                    Name: {
                        title:"File Name"
                    },
                    LastModifiedDate: {
                        title:"Modified Date"
                    }
                }});
文件夹/文档排序

此部分的排序只需单击网格的列标题即可完成。

设置数据成员

文件属性名可以使用 dataMember 属性设置。

  //Data members(Properties) for binding should be defined if it is other than the below specified names
 dataMember: {
                    Path: 'Path',//File path - acts as the unique value to traverse in the tree
                    Name: 'Name',//File or folder name to be displayed
                    Childs: 'Childs',//files in the folders / Child collections
                    Type: 'Type'//type of the file to display the icon
                }

示例代码

$(document).ready(function () {
            $('#myContainer').FEx({
                filesSrc: "/FExDemo/GetFolderTree",
                data: { path: "F:/" },
                rootPath: "F:/",
                
                onLoadStart: function (options) {
                    //
                },
                onLoadEnd: function (records) {
                    //
                },
                validateGridData: function (records) {
                    //
                },
                documentInfoHandler: function (options,selectedData, htmlObject) {
                    //
                },
                onActionStart: function (actionType, postData) {
                    //
                },
                dateFormat: 'd-mm-yy',
                updateAction: {
                    renameUrl: '/FExDemo/UpdateFolder',
                    deleteUrl: '/FExDemo/UpdateFolder',
                    moveUrl: '/FExDemo/UpdateFolder',
                    createFolderUrl: '/FExDemo/UpdateFolder',
                    addFile: '/FExDemo/SaveFile'
                },
                setDynamicHeight: true,
                directorySort: {
                    Name: {
                        title:"File Name"
                    },
                    LastModifiedDate: {
                        title:"Modified Date"
                    }
                },
                gridTemplate: {
                    Format: {
                        title:"File Type"
                    },
                     Name: {
                        title: "Name",updatable:true
                    },
                    LastModifiedDate: {
                        title: "Modified Date",
                        format:true
                    }
                },
                dataMember: {
                    Path: 'Path',//File path acts as the unique value to traverse in the tree
                    Name: 'Name',//File or folder name to be displayed
                    Childs: 'Childs',//files in the folders / Child collections
                    Type: 'Type'//type of the file to display the icon
                }
            });
        });

关注点

学会了如何使用 jQuery、一些漂亮的 CSS3 功能和 JavaScript 模式差异来创建控件。

依赖项和已知问题

依赖项

  • jQuery
  • jQuery-UI
  • JSLINQ

已知问题

  • 重命名包含 . (点) 的文件夹。
  • 更新同一文件夹内的文件夹/文件。

历史

  • 2015 年 2 月 16 日:添加了 dataMember 属性,更新了演示内容并进行了错误修复。
© . All rights reserved.