Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18425
  • 博文数量: 9
  • 博客积分: 1430
  • 博客等级: 上尉
  • 技术积分: 105
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-25 09:57
文章分类
文章存档

2010年(2)

2009年(7)

我的朋友
最近访客

分类:

2009-12-01 13:10:30

当创建显示易度甘特图之后,我们可以对甘特图对象做一些操作,如:新增任务,删除任务,修改任务,移动任务(移动任务到另一个任务前、下、内),升级、降级任务等。下面一一例举操作代码。

 

    1.新增任务

    首先需要创建一个有必要默认属性的任务对象,可以使用如下代码:

var task = dataProject.createTask();

    我们创建了一个任务对象,现在可以马上把它加入到甘特图数据对象内,并马上反应到甘特图显示组件上。

    如果我们想在创建一个任务对象的时候,马上赋予一些自定义的属性,如Name,Start,Finish,PercentComplete等,我们可以这样写:

var task = dataProject.createTask();

//一个一个加属性
task.Name = '新任务';

//批量加属性
Edo.apply(task, {
    Name: '新任务',
    Start: new Date(2009, 1, 1),
    Finish: new Date(2009, 1, 3)
});

    现在我们得到一个满意的任务对象,只需要把它加入到dataProject的任务数据内就可以了:

var task = dataProject.createTask();
task.Name = '<新任务>';

//获得甘特图当前选中行:也是一个任务对象
var parentTask = project.getSelected();

//这里的逻辑是把新建的任务对象,插入到选中行任务的第一个索引处.
dataProject.Tasks.insert(0, task, parentTask);

//如果您有不同的处理, 只需要改变插入任务的逻辑, 比如插入到选中行前面等.
//您也可以参考易度甘特图网站上,默认的新增任务插入逻辑代码

    不需要手动去刷新甘特图显示组件,易度甘特图是MVC模型的组件架构,数据源dataProject和显示组件GanttView是绑定的,当有对dataProject进行操作,会自动马上反应到甘特图显示组件上,更新了界面。

 

    2.删除任务

    一般是对当前选中行做删除操作,也可以对查找出来的任务做删除。删除任务代码如下:

var task = project.getSelected();
if(task){   //加一个判断, 这样可以确定有选中的任务
    dataProject.Tasks.remove(task);
}

   

   3.修改任务

    修改任务是指修改任务的属性,如Name,Start,Finish,PercentComplete等。

    当修改任务的“非关联属性”时,是一件简单的事,比如修改Name:

var task = project.getSelected();
if(task){
    dataProject.Tasks.update(task, 'Name', "新的任务名");                            
}

    当修改任务的"关联属性"时,事件就变得复杂了。

    比如您修改任务的“工期”,那么就会影响此任务的“完成日期”,进而影响和调整此任务的“关联任务”的开始和完成日期。

    您可以参考以下代码,是监听处理任务的编辑事件,易度甘特图官方提供的处理“任务属性改变”逻辑的代码:

function onTaskChange(e){
    var property = e.property, value = e.value, task = e.task, tasks = dataProject.Tasks;
    switch(property){
        case 'Duration':
            //默认8小时工作日, 这里简单处理, 直接在Start上加Duration的时间.
            
            var hours = parseInt(value.Duration / 8) * 24 + value.Duration % 8; 
            var finish = task.Start.add(Date.HOUR, hours);
            
            //如果工期,日期数据是逻辑允许的, 则更新好日期数据.
            if(syncData(task, task.Start, finish, true) !== false){            
                tasks.updateRecord(task, value); 
            }
            
        break;
        case 'Start':
            var finish = new Date(value.getTime() + (task.Finish - task.Start))
            syncData(task, value, finish, true);
        break;
        case 'Finish':            
             syncData(task, task.Start, value, true);   
        break;
        default:                   
            tasks.update(task, property, value);
            
            if(property == 'PercentComplete'){
                //同步父/子任务的完成百分比
                dataProject.syncPercentComplete(task);
            }
            
        break;
    }    
}

    甘特图应用中,任务属性改变的处理,是非常复杂的一个环节,因为修改了一个属性之后,其他的属性会被关联修改,进而有任务相关性的任务,还会继续被关联修改。

 

    4.移动任务

    所谓“移动任务”,是指把一个任务,移动到另一个任务前(后,内),是一个顺序和父任务调整的逻辑。

    请参考以下代码:

//将task1, 移动到task2(方式preend, append, add)
var task1 = dataProject.Tasks.getAt(0);                         //用索引号获取任务

var task2 = dataProject.Tasks.find({Name: '分析/软件需求'});    //用查找来获取任务

dataProject.moveTask(task1, task2, 'add');                      //移动任务

 

    5.升级、降级任务

    升级、降级任务,是对任务节点层次的操作,此功能也是参考微软Project而来,功能逻辑与Project一致。

    代码如下:

var task = project.getSelected();
if(task){
    dataProject.upgradeTask(task);      //升级任务
}

var task = project.getSelected();
if(task){
    dataProject.downgradeTask(task);    //降级任务
}

    更多详细的信息,请到易度甘特图网站上查找到:

友情链接:

阅读(841) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~