在前面的几章之中,我们已经比较详细的介绍了如何向向日葵甘特图的SFData提供数据,现在,我们就需要了解,我们在完成通过数据适配器将数据提供给SFData之后,能够使用SFData来完成什么样的操作呢?换句话说,SFData怎样使用这些数据,提供哪些功能?
同时,SFData还通过四种实体提供了一些方法,这里不一一列举,SFData通过简单的接口通过适配器读取数据,而将其封装成丰富的使用简便的方法,数据组件和甘特图的界面的类不需要关心数据来源,也不需要关心数据是否是通过分块加载,只需要使用这些方法和事件,就可以实现各种各样灵活的功能。
在此之前,让我们看看整个向日葵甘特数据体系的类结构图:
从这个图上可以看出SFData(包括四个实体对象)确实是甘特数据系统的核心,适配器(蓝色部分)是向SFData提供数据,数据组件(绿色部分)是给SFData扩充功能,这两者和外部调用(黄色部分,包括SFGantt甘特图对象对数据的操作)组成三个相互独立的部分,而这三部分之间没有直接关联,而都完全靠SFData对象对这些调用进行调配处理。
前面我们已经介绍了SFData对象和适配器之间的操作,现在我们了解一下,SFData在通过适配器访问数据源的基础上提供哪些方法供数据组件和外部接口调用:
功能方法 | addComponent(comp) | 添加一个数据组件 |
方法类型 | 方法名称 | 方法说明 |
功能方法 | removeComponent(comp) | 移除指定的数据组件 |
功能方法 | depose() | 销毁自身对象,一旦调用,就不可再次调用任何内容 |
获取数据 | getCalendar() | 返回当前数据使用的工作日历 |
获取数据 | getRootTask() | 返回根任务 |
获取数据 | getTaskByUid(uid,force) | 返回指定uid的任务,如果force参数为true,则SFData会在没有找到该任务的情况下不停的读取直至读完所有任务 |
获取数据 | getTaskByOutline(outline) | 根据大纲数字查找任务 |
获取数据 | compareTask(startTask,endTask) | 比较两个任务在任务树之中的上下位置 |
获取数据 | getRootResource() | 返回根资源 |
获取数据 | getResourceByUid(uid,force) | 返回指定uid的资源,如果force参数为true,则SFData会在没有找到该资源的情况下不停的读取直至读完所有资源 |
获取数据 | getResourceByOutline(outline) | 根据大纲数字查找资源 |
获取数据 | compareResource(startResource,endResource) | 比较两个资源在资源树之中的上下位置 |
修改数据 | addTask(parent,pTask) | 添加一个任务 |
修改数据 | deleteTask(task) | 删除一个任务 |
修改数据 | moveTask(task,pTask,preTask) | 移动一个任务 |
修改数据 | addResource(parent,pResource) | 添加一个资源 |
修改数据 | deleteResource(resource) | 删除一个资源 |
修改数据 | moveResource(resource,pResource,preResource) | 移动一个资源 |
修改数据 | addLink(sucTask,preTask,type) | 添加一个链接 |
修改数据 | deleteLink(link) | 删除一个链接 |
修改数据 | addAssignment(task,resource,unit) | 添加一个资源分配 |
修改数据 | deleteAssignment(assignment) | 删除一个资源分配 |
SFData还提供了很多事件支持,下面是事件列表:
事件名称 | 事件参数 | 事件说明 |
taskregister | task | 在任务被初始化读取到SFData时触发 |
resourceregister | resource | 在资源被初始化读取到SFData时触发 |
linkregister | link | 在链接被初始化读取到SFData时触发 |
assignmentregister | assignment | 在资源分配被初始化读取到SFData时触发 |
beforetaskchange | returnObj,task,name,value | 在任务属性更改前触发 |
aftertaskupdate | task,name,value,beforeValue | 在任务属性更改后触发 |
beforeresourcechange | returnObj,resource,name,value | 在资源属性更改前触发 |
afterresourcechange | resource,name,value,beforeValue | 在资源属性更改后触发 |
beforelinkchange | returnObj,link,name,value | 在链接属性更改前触发 |
afterlinkchange | link,name,value,beforeValue | 在链接属性更改后触发 |
beforeassignmentchange | returnObj,assignment,name,value | 在资源分配属性更改前触发 |
afterassignmentchange | assignment,name,value,beforeValue | 在资源分配属性更改后触发 |
beforetaskadd | returnObj,parent,pTask | 在新建任务前触发 |
aftertaskadd | newTask | 在新建任务后触发 |
beforetaskdelete | returnObj,task | 在删除任务前触发 |
aftertaskdelete | task,parent,pt | 在删除任务后触发 |
beforetaskmove | returnObj,task,pTask,preTask | 在移动任务前触发 |
aftertaskmove | task,parentTask,previousSibling | 在移动任务后触发 |
beforeresourceadd | returnObj,parent,pResource | 在新建资源前触发 |
afterresourceadd | newResource | 在新建资源后触发 |
beforeresourcedelete | returnObj,resource | 在删除资源前触发 |
afterresourcedelete | resource,parent,pt | 在删除资源后触发 |
beforeresourcemove | returnObj,resource,pResource,preResource | 在移动资源前触发 |
afterresourcemove | resource,parentResource,previousSibling | 在移动资源后触发 |
beforelinkadd | returnObj,sucTask,preTask,type | 在新建链接前触发 |
afterlinkadd | newLink | 在新建链接后触发 |
beforelinkdelete | returnObj,link | 在删除链接前触发 |
afterlinkdelete | link | 在删除链接后触发 |
beforeassignmentadd | returnObj,task,resource,unit | 在新建资源分配前触发 |
afterassignmentdelete | newAssignment | 在新建资源分配后触发 |
beforeassignmentdelete | returnObj,assignment | 在删除资源分配前触发 |
afterassignmentdelete | assignment | 在删除资源分配后触发 |
而这就是SFData的设计思路。