图表事件
Hierarchy
- 图表事件
图表事件是比 输入事件更抽象的事件. 它们是在 图表 类上触发的. 可以通过调用Diagram.addDiagramListener. 在图表上注册一个图表侦听器来接收此类事件.调用侦听器函数时,将传递一个图表事件实例. 使用name 属性确定它是哪种图表事件. 图表 属性引用图表, 您可以从中获得附加信息,例如Diagram.lastInput,反过来有提供了 例如 InputEvent.documentPoint 之类的信息,这些信息可能与此类图表事件相关.
subject 和 parameter 可选地提供有关关系图表事件的附加信息. subject 是Part 零部件的集合, 也可以是单个对象, 如节点中的Link 链接 或者 GraphObject 图形对象 . 这取决于它是哪种图表事件.
有些图表事件,如 "ObjectSingleClicked" 或"BackgroundDoubleClicked" 通常与 输入事件关联. 有些图表事件,如"SelectionMoved" 或 "PartRotated" 与Tool-handled gestures 或者CommandHandler 操作的结果相关联. 有些图表事件根本不必与任何输入事件相关联,例如 "ViewportBoundsChanged",这可能由于程序的直接更改 Diagram.position 和 Diagram.scale 属性而触发事件.
在整个关系图的状态稳定下来之前,可以调用事务期间发生的图表事件. 这通常意味着此类事件发生在布局之前,因此节点可能没有它们的最终位置, 链接可能没有最终的路由, Diagram.documentBounds 和 Diagram.viewportBounds 可能还没有更新. 这些事件可能对图表进行额外的更改,从而可能导致额外的副作用.
发生在事务外部的事件,如果有修改需要您手动启动和提交事务. 但是,有些图表事件不允许您对图表或模型进行任何更改.
事件使用例子
//返回类型为DiagramEvent.subject 对象集合的例如SelectionDeleting
//监听节点删除前事件
myDiagram.addDiagramListener("SelectionDeleting", function(e) {
e.subject.each(function(n) {
//n为删除节点或线的对象,n.data 为json数据
console.log(n.data);
if(n instanceof go.Node) {
//判断是不是节点
}
});
});
当前定义的图表事件名称包括:
- "AnimationStarting" 动画渲染前事件,加载图表的动画即将开始;
不要在事件监听器中修改关系图或其模型. - "AnimationFinished" 动画渲染完事件,加载图表刚刚完成的动画;
不要在事件监听器中修改关系图或其模型. - "BackgroundSingleClicked" 背景单击事件, 单击图表背景;
如果做了任何更改,请启动并提交事务. - "BackgroundDoubleClicked" 背景双击事件, 双击图表背景;
如果做了任何更改,请启动并提交事务. - "BackgroundContextClicked" 背景右键事件, 右键单击图表背景;
如果做了任何更改,请启动并提交事务. - "ChangingSelection" 改变选择前事件, 一个操作即将改变Diagram.selection 图表选择集合,
DiagramEvent.subject为该集合的值;
不要对事件监听器中的选择或关系图进行任何更改; 注意,直接设置 Part.isSelected 将不会触发此事件,但是工具和命令会触发此事件. - "ChangedSelection" 改变选择后事件, 一个操作已经改变 Diagram.selection 图表选择集合,
DiagramEvent.subject为该集合的值;
不要对事件监听器中的选择或关系图进行任何更改; 注意,直接设置 Part.isSelected 将不会触发此事件,但是工具和命令会触发此事件. - "ClipboardChanged" 剪切板改变事件, 零部件已被CommandHandler.copySelection复制到剪贴板上;
the DiagramEvent.subject 为 零部件的集合;
如果做了任何更改,请启动并提交事务. - "ClipboardPasted" 剪切板粘贴事件,零部件已由CommandHandler.pasteSelection从剪贴板复制到图表中;
DiagramEvent.subject为 Diagram.selection,
已在事务中调用,不用再启动和提交事务. - "DocumentBoundsChanged" 文档范围改变事件, 图表中各零部件的面积, Diagram.documentBounds,已经改变了;
DiagramEvent.parameter 为旧的Rect - "ExternalObjectsDropped" (节点或线等)零部件拖放生成事件, 零部件已经通过拖拽从图的外部复制到图中;
DiagramEvent.subject 是拖拽过来的 零部件 (这也是选中的Diagram.selection), the DiagramEvent.parameter is the source Diagram, 已在事务中调用. - "GainedFocus" 获得键盘焦点事件, 该图获得了键盘焦点,例如在调用Diagram.focus之后.
- "InitialLayoutCompleted" 初始化布局完成事件,整个图表布局自图表发生重大变化(如更换模型)以来首次更新;
如果进行任何更改,则不需要执行事务. - "LayoutCompleted" 布局完成事件, 整个图表布局刚刚更新;
如果进行任何更改,则不需要执行事务. - "LinkDrawn" 线创建事件,用户刚刚使用LinkingTool创建了一个新链接;
DiagramEvent.subject 为新创建的线,
已在事务中调用. - "LinkRelinked" 线重新连接事件, 用户刚刚通过RelinkingTool 或 DraggingTool重新连接了现有线;
DiagramEvent.subject为修改的 线,
DiagramEvent.parameter为线被断开的 GraphObject端口,
已在事务中调用. - "LinkReshaped" 线路径改变事件, 用户刚刚通过LinkReshapingTool调整了线的路径;
DiagramEvent.subject 为修改的 线,
the DiagramEvent.parameter 为线的原始路径点列表, 已在事务中调用. - "LostFocus" 图表失去焦点事件,这个图表失去了键盘焦点, a.k.a. "blur".
- "Modified" 图表改变事件, Diagram.isModified 属性已被设置为一个新值——用于将窗口标记为自上次保存以来已被修改;
不要在事件监听器中修改Diagram或Model. - "ObjectSingleClicked" 对象单击事件, 单击了图形对象(节点和线等);
DiagramEvent.subject 为 图形对象;
如果做了任何更改,请启动并提交事务. - "ObjectDoubleClicked", 双击了图形对象(节点和线等);
DiagramEvent.subject为 图形对象;
如果做了任何更改,请启动并提交事务. - "ObjectContextClicked", 右键单击了图形对象(节点和线等);
为 图形对象;
如果做了任何更改,请启动并提交事务. - "PartCreated" Part创建事件,用户通过 ClickCreatingTool插入新的零部件;
the DiagramEvent.subject为新的Part 零部件,
已在事务中调用. - "PartResized" Part大小改变事件, 用户通过ResizingTool 调整工具改变了一个图形对象的大小;
DiagramEvent.subject 为 图形对象,
DiagramEvent.parameter 为原始尺寸,
已在事务中调用. - "PartRotated" Part旋转事件, 用户通过RotatingTool 旋转工具改变了一个图形对象的角度 ;
the DiagramEvent.subject 为 图形对象,
the DiagramEvent.parameter 为原始角度,
已在事务中调用. - "SelectionMoved" 拖动事件, 用户通过DraggingTool 拖动工具移动了选定的部分;
the DiagramEvent.subject为拖动的零部件,
已在事务中调用. - "SelectionCopied" 复制事件,户通过DraggingTool 拖动工具复制了选定的部分;
DiagramEvent.subject为新拷贝的零部件集合,
已在事务中调用. - "SelectionDeleted" 删除后事件,用户通过 CommandHandler.deleteSelection 已经删除了选定的部分;
the DiagramEvent.subject 是已删除的零部件集合,
已在事务中调用. - "SelectionDeleting" 删除前事件,用户通过 CommandHandler.deleteSelection即将删除选定的部分;
the DiagramEvent.subject 为Diagram.selection 即将删除的零部件集合,
已在事务中调用. - "SelectionGrouped" 选择创建分组事件, 用户通过CommandHandler.groupSelection已经从选择的零部件中创建了一个新的组 ;
DiagramEvent.subject 为新的组 组,
已在事务中调用. - "SelectionUngrouped",用户已删除选定的组,但通过CommandHandler.ungroupSelection保留其成员;
DiagramEvent.subject未分组的 组的集合,
DiagramEvent.parameter 参数是未分组的前成员零部件的集合, 已在事务中调用. - "SubGraphCollapsed" 子图折叠事件, 用户通过CommandHandler.collapseSubGraph将选定的组折叠;
DiagramEvent.subject为已折叠的 组集合,
已在事务中调用. - "SubGraphExpanded" 子图展开事件, 用户通过CommandHandler.expandSubGraph将选定的组展开;
the DiagramEvent.subject为展开的 组集合,
已在事务中调用. - "TextEdited" 文本块修改事件,用户通过文本编辑工具改变了文本块的字符串值;
DiagramEvent.subject 为编辑过的 TextBlock 文本块,
the DiagramEvent.parameter 为原始字符串,
已在事务中调用. - "TreeCollapsed" 树折叠事件, 用户通过CommandHandler.collapseTree折叠所选节点的子树;
DiagramEvent.subject 为被折叠的节点集合,
已在事务中调用. - "TreeExpanded" 树展开事件, 用户通过CommandHandler.expandTree展开了所选节点的子树;
DiagramEvent.subject为被展开的节点集合,
已在事务中调用. - "ViewportBoundsChanged"视窗范围改变事件,图表中可见的区域, Diagram.viewportBounds,发生了改变;
DiagramEvent.subject 为一个对象,
"scale"属性是旧的 Diagram.scale 值,
"position" 属性是旧的Diagram.position 值,
"bounds" 属性是旧的 Diagram.viewportBounds 值,
DiagramEvent.parameter 是旧的viewportBounds Rect.
构造函数
constructor
- new DiagramEvent(): DiagramEvent
-
DiagramEvent类构造函数生成一个空的DiagramEvent.你不需要调用这个构造函数.但是如果您这样做了,您必须首先将diagram设置为Diagram,然后才能进行其他使用.
Returns DiagramEvent
属性
diagram : Diagram
-
获取与事件关联的图表.
name : string
-
获取或设置图表事件类型的名称.此属性应始终设置为可识别的名称列表之一,如图表事件文档中所列.
parameter : any
-
获取或设置描述对图表事件subject更改的可选对象.此属性默认为null.
subject : any
-
获取或设置作为图表事件subject的可选对象.此属性默认为null.