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

2010年(2)

2009年(7)

我的朋友
最近访客

分类:

2009-12-03 14:04:15

易度甘特图的事件对象是Edo.data.DataTable,提供了如下6个事件接口:

1.taskadd:新增任务

2.taskremove: 删除任务

3.taskedit:任务修改(这个是右键菜单中的编辑事件,并不是任务属性的更新事件!一般用来监听给一个任务面板填充任务信息)

4.taskchange:任务属性改变(任务的Name, Start等属性要改变了.不过是不是改变,如何改变,由事件监听器处理)

5.taskgradechange:升级/降级任务

6.taskmove: 移动任务

 

    监听甘特图事件代码如下:

//监听甘特图数据对象相关事件        
dataProject.on('taskadd', onTaskAdd);                       //新增
dataProject.on('taskremove', onTaskRemove);                 //删除
dataProject.on('taskedit', onTaskEdit);                     //修改

dataProject.on('taskchange', onTaskChange);                 //任务属性改变(处理数据逻辑)

dataProject.on('taskgradechange', onTaskGradeChange);       //升级/降级任务
dataProject.on('taskmove', onTaskMove);                     //任务移动调整

    易度甘特图提供了官方的监听事件处理数据逻辑(如仿微软Project数据联动,自动更新摘要任务日期,自动更新父、子任务完成百分比等)的代码示例,如下:

//------------------------- 甘特图任务操作相关事件处理 ----------------------------//
function onTaskAdd(e){
    
    var tasks = dataProject.Tasks;
    
    var task = dataProject.createTask();    //创建一个空白的任务,具备了各个必要属性.
    
    var parentTask = tasks, index = 0;
    
    //如果有目标行,则自己控制如果加入: 1)加在前面; 2)加在后面; 3)加在里面,最后一个...等等   
    //这里的逻辑参考的是微软Project,加在选中任务的前面
    if(e.targetTask){
        parentTask = tasks.findParent(e.targetTask);
        index = parentTask.children.indexOf(e.targetTask);
    }
    
    tasks.insert(index, task, parentTask);
}
function onTaskRemove(e){
    if(confirm("确认删除 \""+e.task.Name+"\" 任务吗?")){  
        dataProject.Tasks.remove(e.task);
    }
    
}
function onTaskEdit(e){
    
    alert("edit:"+e.task.Name);
    //你可以在这里得到要编辑的任务对象, 在一个自定义"任务面板"内显示并做修改.
    
}
function onTaskChange(e){
    //status = (e.property+":"+e.value);
    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;
    }    
}
//升级/降级
function onTaskGradeChange(e){
    var task = e.task;
    if(e.action == 'upgrade'){
        dataProject.upgradeTask(e.task);
    }else{
        dataProject.downgradeTask(e.task);
    }
}
//任务位置调整
function onTaskMove(e){
    dataProject.moveTask(e.task, e.targetTask, e.action);
}

    注意:您也可以监听甘特图事件,编写Ajax交互代码,即时把甘特图操作结果更新到服务端,然后重新刷新甘特图。


网站:

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