甘特图布局
从版本 5.0 开始,甘特图提供了可配置布局的能力,可以将组件的元素作为布局的内部视图来排列。
它允许你使用附加的时间线和网格来实现灵活的甘特图结构,并定义多种元素排列方案。
例如,你可以在时间线的右侧再放置一个网格:

相关示例: Gantt 右侧网格列
或者在默认网格和时间线下方再添加一个网格和一个时间线。

相关示例: 带资源面板的甘特图
默认布局
布局通过 gantt.config.layout 配置选项设置。布局的默认配置如下:
gantt.config.layout = {
css: "gantt_container",
rows: [
{
cols: [
{
// the default grid view
view: "grid",
scrollX: "scrollHor",
scrollY: "scrollVer"
},
{ resizer: true, width: 1 },
{
// the default timeline view
view: "timeline",
scrollX: "scrollHor",
scrollY: "scrollVer"
},
{
view: "scrollbar",
id: "scrollVer"
}
]
},
{
view: "scrollbar",
id: "scrollHor"
}
]
}
甘特图的布局由被视图占据的单元格组成。主要和辅助的甘特图元素由 views(视图)来呈现,具体包括:
- grid - 定义甘特图的网格部分。用于显示任务的主网格的预定义 id 为 id:"grid";
- timeline - 定义甘特图的时间线部分。用于显示任务的主时间线的预定义 id:"timeline";
- resizer - 定义调整大小线。要启用调整大小器,需要将 resizer 属性设置为 true。仅在 PRO 版可用;
- scrollbar - 定义甘特图中使用的滚动条。网格和时间线视图可以绑定到特定滚动条。下面将有详细说明。
- resourceGrid - 为资源面板预配置的网格。仅在 PRO 版可用。更多细节请参见 此处。
- resourceTimeline - 为资源面板预配置的时间线。仅在 PRO 版可用。更多细节请参见 此处。
视图配置被指定为具有相应属性的对象。你可以为 grid 和 timeline 视图设置自定义配置选项 自定义配置选项 。默认选项取自全局对象 gantt.config。
请注意,在初始化 Gantt 之前应指定布局的配置。如果对布局进行了修改,需要使用 resetLayout 进行刷新。
滚动条
布局的滚动条由 "scrollbar" 视图指定。你可以设置水平和垂直滚动条。
若要在布局中使用滚动条,需要通过必要滚动条的 ID,借助 scrollX 或 scrollY 属性,将其绑定到相应的视图。
为一个视图绑定滚动条
可以将多个视图绑定到 同一个滚动条。要将视图绑定到滚动条:
- 设置一个具有必要滚动方向的滚动条并给它分配一个 ID
- 在视图配置对象中,将滚动条的 ID 作为 scrollX/scrollY 的值
在 cols 数组中定义滚动条将创建一个垂直滚动条,在 rows 数组中定义滚动条将创建一个水平滚动条。或者,你可以通过显式设置 scroll 参数来定义滚动模式:
{ view: "scrollbar", id: "scroller", scroll: "x" } // horizontal
或:
{ view: "scrollbar", id: "scroller", scroll: "y" } // vertical
让我们将自定义网格和时间线视图绑定到垂直滚动条:
gantt.config.layout = {
css: "gantt_container",
rows: [
{
cols: [
{ view: "grid", scrollY: "scrollVer" },
{ resizer: true, width: 1 },
{ view: "timeline", scrollY: "scrollVer" },
{ view: "scrollbar", id: "scrollVer" }
]
}
]
}
当你滚动垂直滚动条时,网格和时间线会一起滚动。在默认布局中,网格和时间线视图绑定到水平和垂直滚动条。
同样,也可以为 Grid 视图指定一个单独的水平滚动条。阅读详情 在相应部分。
视图的滚动条
在上面的子节中,我们已经介绍了如何为必要的视图添加一个特定的滚动条。为此,只需创建一个简单的布局配置,如下所示:
{ cols: [ { rows: [ {}, {} ] }, { rows: [ {}, {} ] } ] }
或:
{ rows: [ { cols: [ {}, {} ] }, { cols: [ {}, {} ] } ] }
如果你需要将一个视图绑定到垂直和水平滚动条,请在 cols 与 rows 数组中创建一个复杂的布局配置,嵌套多层,例如:
{ cols: [
{
rows: [
{
cols: [ {}, {} ]
},
{
cols: [ {}, {} ]
}
]
},
{
rows: [
{
cols: [ {}, {} ]
},
{
cols: [
{
rows: [ {}, {} ]
},
{
rows: [ {}, {} ]
}
]
}
]
}
]}
请参阅以下示例:
布局自定义
你可以更改默认布局配置,并使用附加布局视图来指定甘特图在页面上的元素排列方案。
例如,你可以创建额外的网格和时间线视图,为主甘特图创建一个底部资源面板。实现这样一个自定义布局的步骤如下:
- 创建一个多行布局
- 在布局的第一行添加默认网格和时间线
- 在下一行添加额外的网格和时间线,并绑定到自定义数据源
- 在这些行之间添加一个调整大小器
- 在最后一行添加一个滚动条,并将其绑定到默认和资源时间线
gantt.config.layout = {
css: "gantt_container",
rows: [
{
// the default layout
cols: [
{ view: "grid", config: mainGridConfig, scrollY: "scrollVer" },
{ resizer: true, width: 1 },
{ view: "timeline", scrollX: "scrollHor", scrollY: "scrollVer" },
{ view: "scrollbar", id: "scrollVer" }
]
},
{ resizer: true, width: 1 },
{
// a custom layout
cols: [
{ view: "grid", id: "resourceGrid", bind: "resource",
config: resourceGridConfig, scrollY: "resourceVScroll"
},
{ resizer: true, width: 1 },
{ view: "timeline", id: "resourceTimeline", scrollX: "scrollHor",
bind: "resource", bindLinks: null, layers: resourceLayers,
scrollY: "resourceVScroll"
},
{ view: "scrollbar", id: "resourceVScroll" }
]
},
{ view: "scrollbar", id: "scrollHor" }
]
};
在上述示例中,添加了一个额外的网格视图。它包含资源清单及其工作负载。同时还有一个额外的时间线视图,用于显示一个月内的工作小时分布,并指示标准工时与加班工时。