无梦家园

无梦家园
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

创建易度甘特图

Posted on 2009-12-24 09:38  沧桑雨迢迢  阅读(801)  评论(0编辑  收藏  举报

    创建一个易度甘特图,需要有两大对象:

    1.Edo.project.GanttView :甘特图显示组件

    2.Edo.data.DataProject   :甘特图数据组件

    GanttView组件是一般意义上的易度甘特图组件,它是一个界面显示组件,是一个左侧树形任务,右侧条形图的组件。

    DataProject是甘特图数据组件,它提供了甘特图显示和操作逻辑的数据功能,是一个不可见的组件。

    两者配合,实现了一个完整的甘特图应用,

    另外,不得不要说另一个关键的组件:Edo.util.Ajax。

    我们的甘特图数据,往往是以XML或JSON静态方式存放在服务端,或者是以数据库方式存放。我们在页面显示甘特图的时候,需要从服务端把这些数据提取出来,生成一个DataProject数据对象,然后才能由GanttView正确显示出来。

    这里,Ajax负责在客户端页面,从服务端获取数据提供给甘特图显示和操作,并且在甘特图操作之后,把甘特图数据,继续以XML或JSON数据形式传递到服务端,更新进数据库的功能。

    下面通过一个标准的范例,来说明在页面上,创建一个易度甘特图应用的全过程:

    首先,我们需要在页面内引用易度甘特图的css和js:

<!--edogantt css-->
<link href="../scripts/edo/res/css/base.css" rel="stylesheet" type="text/css" />
<
link href="../scripts/edo/res/css/core.css" rel="stylesheet" type="text/css" />
<
link href="../scripts/edo/res/css/skin.css" rel="stylesheet" type="text/css" />
<
link href="../scripts/edo/res/product/project/css/project.css" rel="stylesheet" type="text/css" />
<!--edogantt javascript-->
<script src="../scripts/edo/edo.js" type="text/javascript"></script>

   注意:请仔细检查css和js的路径是否正确。

   然后,我们就可以使用Ajax获取甘特图数据,创建DataProject,创建GanttView,最终生成一个WEB甘特图应用了:

var dataProject, project;

Edo.util.Dom.on(window, 'load', function(e){
//创建易度甘特图组件
project = Edo.create({
type: 'ganttview',
width: 700,
height: 400,
render: document.getElementById('example-view')
});

//使用Ajax, 从服务端获取甘特图数据字符串
Edo.util.Ajax.request({
url: '../data/project.xml', //数据源地址: 请注意路径
onSuccess: function(text){
//使用xml字符串创建Edo.data.DataProject数据对象
dataProject = new Edo.data.DataProject(text);

//dataProject设置给ganttview对象的data属性即可显示和操作
project.set('data', dataProject);
},
onFail: function(err){
alert("加载xml数据失败,错误码:"+err);
}
});
});

   以上是从服务端加载XML数据格式的范例,如果您加载的是JSON格式,参考如下代码:

Edo.util.Ajax.request({
url: '../data/project.txt',
onSuccess: function(text){
//从json创建Edo.data.DataProject数据对象
var json = Edo.util.Json.decode(text);
dataProject = new Edo.data.DataProject(json.result);

project.set('data', dataProject);
},
onFail: function(err){
alert("加载xml数据失败,错误码:"+err);
}
});
   仅仅是在创建Edo.data.DataProject时的不同处理。

    当创建显示易度甘特图之后,易度甘特图组件提供了一系列功能操作入口。如点击任务树单元格进行编辑,鼠标拖拽调整右侧条形图区域中任务的开始日期、完成日期和完成百分比,以及右键菜单中的“新增、删除、修改、升级、降级”等任务操作功能。

    注意!如果您创建显示甘特图之后,未监听处理甘特图的任何事件,那么任务操作后的任务状态将不会有任何改变,一切任务的操作结果,全部通过甘特图事件,开放给用户,由用户监听并处理任务的操作后状态。

    就是说,易度甘特图只是做了显示和操作的功能封装,但是对于操作结果,不加以干涉,完全交给用户来控制。

    比如,用户在界面编辑修改了某一任务的完成日期,这时候会激发taskchange事件,用户可以监听处理这个taskchange事件,得知:是哪个任 务,什么属性,要改成什么样的值。用户可以简单的直接设置给任务(参考甘特图的任务操作篇),也可以经过一系列复杂的数据逻辑计算和处理,从而判断是否可 以修改,修改后,此任务关联的其他任务的日期怎么联动处理等。

    甘特图数据处理,完全交给了开发者,使开发者对数据处理,有了100%的掌控。

    易度甘特图提供了官方的事件监听数据处理示例,完全参考微软Project的数据操作处理逻辑,具体请参考www.edogantt.com网站的在线示例。