dhtmlx gantt 点击当行某个字段的触发事件
时间: 2023-12-08 07:05:37 浏览: 715
当用户点击甘特图中的某个字段时,可以使用dhtmlx gantt中的事件来触发相应的操作。其中,可以使用onTaskClick事件来实现对任务的点击操作,可以使用onBeforeLightbox事件来实现在打开灯箱之前的操作。例如,可以使用以下代码来实现点击任务字段时的操作:
gantt.attachEvent("onTaskClick", function(id, e) {
// 在这里执行所需的操作
});
相关问题
dhtmlxgantt.js duration
### dhtmlxGantt.js 中 `duration` 属性的使用
在 dhtmlxGantt.js 库中,`duration` 属性用于表示任务持续时间。此属性通常与特定的任务对象关联,并影响甘特图上的显示效果。
对于编辑器配置,可以设置如下:
```javascript
var durationEditor = {
type: "number",
map_to: "duration",
min: 0,
max: 100
};
```
上述代码片段展示了如何创建一个名为 `durationEditor` 的变量来定义输入控件的行为[^1]。该控件允许用户通过界面调整任务的持续时间,范围限定于 0 到 100 单位之间(具体单位取决于应用上下文)。这种设定有助于确保数据有效性并提供直观的操作体验给最终使用者。
为了更好地理解 `duration` 属性的应用场景及其与其他功能模块之间的交互方式,下面给出一段完整的 JavaScript 实现示例,它不仅涵盖了基本的任务管理还包括了 UI 状态保持机制以及样式适配等内容:
#### 创建和初始化甘特图实例
首先,在 HTML 文件内引入必要的资源文件之后,可以通过以下脚本启动一个新的甘特图实例:
```javascript
gantt.init("gantt_here");
gantt.config.xml_date = "%Y-%m-%d %H:%i";
// 设置默认视图模式和其他全局参数...
```
这里假设有一个 ID 为 `"gantt_here"` 的 DOM 元素作为图表渲染的目标区域;同时指定了日期格式化字符串以便后续解析 XML 数据源时能够正确识别时间戳信息。
#### 配置任务字段映射关系
接着要做的就是告诉 gantt 组件哪些自定义属性应该被用来填充内部模型结构。这一步骤涉及到修改 `config.lightbox.sections` 和其他相关选项以适应项目需求:
```javascript
gantt.attachEvent("onLightbox", function (id) {
var task = gantt.getTask(id);
// 动态更新 lightbox 表单内的初始值
});
gantt.config.columns = [
{name:"text", label:"Task name", tree:true, width:200},
{name:"start_date", label:"Start time", align:"center"},
{name:"duration", label:"Duration", align:"center"}
];
```
这段代码设置了表格列布局,并明确了每一列表头对应的键名。值得注意的是,“duration” 字段在这里得到了特别处理——其标签名称设为 “Duration”,并且居中对齐显示数值型内容。
#### 处理工具栏事件及保存状态
考虑到用户体验方面的要求,每当点击全展/收起按钮时都应当同步记录当前分支的状态变化情况:
```javascript
document.getElementById('expandAll').addEventListener('click', function () {
gantt.expand();
saveBranchesState();
});
document.getElementById('collapseAll').addEventListener('click', function () {
gantt.collapse();
saveBranchesState();
});
```
以上逻辑实现了监听指定元素触发的动作,并调用了相应的 API 方法完成节点操作的同时还执行了一次额外的状态存盘动作[^2]。
#### 调整容器尺寸以支持响应式设计
最后但同样重要的一点是要保证甘特图能够在不同设备屏幕上正常呈现出来。为此需遵循官方文档建议的做法即赋予外部包裹层合适的宽高比例约束条件:
```css
html, body{
margin:0px;
padding:0px;
height:100%;
/*强制*/
overflow:hidden;
}
#gantt_here{
position:relative;
width:100%;
height:100%;
}
```
这些 CSS 规则确保即使是在移动端浏览器环境下也能获得良好的视觉反馈效果[^3]。
dhtmlxgantt表头增加排序图标,点击图标时,使用 Programmatic sorting,对优先级、问题状态进行排序
### 实现 dhtmlxGantt 表格中的排序功能
为了实现在 dhtmlxGantt 表头添加排序图标并允许用户通过点击这些图标来按照优先级和问题状态进行排序,可以采取如下方式:
#### 添加表头排序图标
首先,在初始化 Gantt 图时配置列布局,并为希望支持排序的列指定额外属性。对于需要显示排序图标的列,可以通过自定义模板的方式引入 HTML 元素作为排序按钮。
```javascript
gantt.config.columns = [
{name:"text", label:function(){return "<div class='sortable'>名称</div>";}, tree:true, width:200},
{name:"start_date", label:"开始日期"},
{name:"duration", label:"持续时间"},
{
name:"priority",
label:function(){
return `<div class="sortable sort-priority">优先级<span>↑↓</span></div>`;
},
align:"center"
},
{
name:"status",
label:function(){
return `<div class="sortable sort-status">状态<span>↑↓</span></div>`;
}
}
];
```
上述代码片段中,`label` 属性被重写成返回带有类名 `sortable` 的 div 容器,其中包含了可视化的上下箭头符号表示此列为可排序字段[^1]。
#### 绑定事件处理函数以响应用户的交互操作
为了让排序图标具有实际作用,需监听其上的鼠标单击事件,并据此触发相应的数据重新排列逻辑。这通常涉及修改默认的任务比较规则以及调用刷新视图的方法使更改生效。
```javascript
document.querySelectorAll('.sort-priority,.sort-status').forEach((element)=>{
element.addEventListener('click',function(e){
const column = e.target.closest('[class*="sort-"]').classList[0].split('-')[1]; // 获取当前点击的是哪个分类
let order;
if(this.querySelector('i')){
this.innerHTML=this.innerHTML.replace(/<i.*?>/,''); // 移除原有指示符
order="asc";
}else{
this.innerHTML+=` <i>${column==='priority'?'高→低':'未完成→已完成'}</i>`; // 插入新的指示符
order="desc";
}
gantt.sortTasks(function(a,b){
switch(column){
case 'priority':
return a.priority>b.priority ? (order==="asc"?1:-1):(a.priority<b.priority?-(order==="asc"?1:-1):0);
case 'status':
var statusOrder={"open":1,"inprogress":2,"completed":3};
return statusOrder[a.status]>statusOrder[b.status]? (order==="asc"?1:-1):(statusOrder[a.status]<statusOrder[b.status]? -(order==="asc"?1:-1):0);
}
});
gantt.refreshData();
})
});
```
这段 JavaScript 代码实现了当用户点击特定列头部时改变任务列表顺序的功能。每次点击都会切换升序/降序模式,并更新 UI 上对应的提示信息。同时调整了内部存储的数据项之间的相对位置关系,最后强制整个组件重新渲染以反映最新的排序结果[^2]。
#### 自定义样式提升用户体验
考虑到美观性和易用性的因素,建议针对新增加的排序控制元素应用 CSS 样式来进行美化。例如,可以使它们看起来更像传统的表格标题栏内的筛选条件选项;也可以利用字体图标库(如 Font Awesome)提供更加直观形象的小图标代替纯文本形式的方向指引标记。
```css
/* 基础样式 */
.sortable{cursor:pointer;}
.sortable span{font-size:.8em;margin-left:.5ch;}
/* 升序/降序标志颜色区分 */
.sortable i::after{content:' ▲';color:green;display:inline-block;}
.sortable.descending i::after{content:' ▼';color:red;}
```
以上就是关于如何在 dhtmlxGantt 中实现基于优先级和问题状态两方面特性值的程序化排序机制的具体介绍。除了这里提到的内容外,还可以进一步探索其他高级定制可能性,比如保存用户的偏好设置以便下次访问自动恢复上次的选择等。
阅读全文
相关推荐

















