分类:
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交互代码,即时把甘特图操作结果更新到服务端,然后重新刷新甘特图。
网站: