Skip to content

事件与回调

Yotsuba Gantt 通过事件报告用户操作,不直接持久化或改写宿主数据。任务拖动、缩放和维度变化都应由宿主接收载荷、完成校验,再更新状态管理或后端。

推荐交互约定

  • 单击任务条或任务行:选中任务并打开轻量检查器。
  • 双击任务:打开完整详情或编辑 Dialog。
  • 双击依赖线:打开依赖关系编辑器。
  • 拖动或缩放:事件返回建议日期;宿主决定是否接受。
  • 可见范围变化:按当前行与日期窗口请求远程数据,不在每个滚动像素发请求。

Vue 事件

事件载荷何时触发
update:viewViewPresetId维度变化,用于 v-model:view
update:sidebarWidthnumber左右分栏调整
update:taskTableColumnsGanttTaskColumnConfig[]任务表列宽或显隐变化
task-clickTaskClickPayload单击任务行或任务条,source 区分来源
task-dblclickTaskDoubleClickPayload双击任务
task-changeTaskChangePayload移动、调整开始或结束日期
task-column-resizeTaskColumnResizePayload指针、键盘、API 或自适应调整列宽
link-dblclickLinkDoubleClickPayload双击依赖线或聚焦后按 Enter
task-selectGanttTask | null当前选中任务改变
focus / scrollDate自动聚焦或横向滚动中心日期改变
visible-range-changeGanttVisibleRangePayload可见日期与行窗口改变
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 事件
onViewChangeViewPresetIdupdate:view
onSidebarWidthChangenumberupdate:sidebarWidth
onTaskClickGanttReactTaskClicktask-click
onTaskDoubleClick(task, event)task-dblclick
onTaskChangeGanttReactTaskChangetask-change
onLinkDoubleClickGanttReactLinkDoubleClicklink-dblclick
onVisibleRangeChangeGanttReactVisibleRangevisible-range-change

React 的任务和维度既可以受控,也可以只使用 defaultView 初始化。业务需要保证服务端状态一致时,优先使用受控 viewselectedTaskId 和不可变任务数组。

Flutter 回调

参数载荷说明
onViewModeChangedYgViewMode年、季、月、周、日、时切换
onTaskTapYgTask单击任务
onTaskDoubleTapYgTask双击任务
onTaskChangedYgTaskChange移动或缩放后的不可变替换值
onVisibleRangeChangedYgVisibleRange当前日期与行窗口,每帧最多一次

YgTaskChange.previous 是交互前对象,task 是建议替换值,kindmoveresizeStartresizeEnd

远程窗口防抖

visible-range-change / onVisibleRangeChange / onVisibleRangeChanged 已按渲染帧合并,但网络请求仍应由宿主按窗口键去重,并取消已经离开视口的旧请求。完整策略见大数据性能

MIT License · Vue / React / Flutter