事件与回调
Yotsuba Gantt 通过事件报告用户操作,不直接持久化或改写宿主数据。任务拖动、缩放和维度变化都应由宿主接收载荷、完成校验,再更新状态管理或后端。
推荐交互约定
- 单击任务条或任务行:选中任务并打开轻量检查器。
- 双击任务:打开完整详情或编辑 Dialog。
- 双击依赖线:打开依赖关系编辑器。
- 拖动或缩放:事件返回建议日期;宿主决定是否接受。
- 可见范围变化:按当前行与日期窗口请求远程数据,不在每个滚动像素发请求。
Vue 事件
| 事件 | 载荷 | 何时触发 |
|---|---|---|
update:view | ViewPresetId | 维度变化,用于 v-model:view |
update:sidebarWidth | number | 左右分栏调整 |
update:taskTableColumns | GanttTaskColumnConfig[] | 任务表列宽或显隐变化 |
task-click | TaskClickPayload | 单击任务行或任务条,source 区分来源 |
task-dblclick | TaskDoubleClickPayload | 双击任务 |
task-change | TaskChangePayload | 移动、调整开始或结束日期 |
task-column-resize | TaskColumnResizePayload | 指针、键盘、API 或自适应调整列宽 |
link-dblclick | LinkDoubleClickPayload | 双击依赖线或聚焦后按 Enter |
task-select | GanttTask | null | 当前选中任务改变 |
focus / scroll | Date | 自动聚焦或横向滚动中心日期改变 |
visible-range-change | GanttVisibleRangePayload | 可见日期与行窗口改变 |
vue
<YgGantt
:tasks="tasks"
:links="links"
@task-click="({ task }) => selectedTask = task"
@task-dblclick="({ task }) => openDetails(task)"
@task-change="saveTaskChange"
@visible-range-change="loadWindow"
/>React 回调
| Prop | 载荷 | 对应 Vue 事件 |
|---|---|---|
onViewChange | ViewPresetId | update:view |
onSidebarWidthChange | number | update:sidebarWidth |
onTaskClick | GanttReactTaskClick | task-click |
onTaskDoubleClick | (task, event) | task-dblclick |
onTaskChange | GanttReactTaskChange | task-change |
onLinkDoubleClick | GanttReactLinkDoubleClick | link-dblclick |
onVisibleRangeChange | GanttReactVisibleRange | visible-range-change |
React 的任务和维度既可以受控,也可以只使用 defaultView 初始化。业务需要保证服务端状态一致时,优先使用受控 view、selectedTaskId 和不可变任务数组。
Flutter 回调
| 参数 | 载荷 | 说明 |
|---|---|---|
onViewModeChanged | YgViewMode | 年、季、月、周、日、时切换 |
onTaskTap | YgTask | 单击任务 |
onTaskDoubleTap | YgTask | 双击任务 |
onTaskChanged | YgTaskChange | 移动或缩放后的不可变替换值 |
onVisibleRangeChanged | YgVisibleRange | 当前日期与行窗口,每帧最多一次 |
YgTaskChange.previous 是交互前对象,task 是建议替换值,kind 为 move、resizeStart 或 resizeEnd。
远程窗口防抖
visible-range-change / onVisibleRangeChange / onVisibleRangeChanged 已按渲染帧合并,但网络请求仍应由宿主按窗口键去重,并取消已经离开视口的旧请求。完整策略见大数据性能。
