mxGraph快捷键的绑定以及多个实例快捷键切换处理

JavaScript 2013-12-18 mxGraph,快捷键

mxGraph可以通过绑定快捷键的方式更便捷的绘图,如examples中的例子都是在一篇xml文档中定义快捷键的,

xml文档Code:

<mxEditor>
	<mxDefaultKeyHandler as="keyHandler">
		<add as="8" action="collapse"/>
		<add as="13" action="expand"/>
		<add as="33" action="exitGroup"/>
		<add as="34" action="enterGroup"/>
		<add as="35" action="refresh"/>
		<add as="36" action="home"/>
		<add as="37" action="selectPrevious"/>
		<add as="38" action="selectParent"/>
		<add as="40" action="selectChild"/>
		<add as="39" action="selectNext"/>
		<add as="46" action="delete"/>
		<add as="65" control="1" action="selectAll"/>
		<add as="90" control="1" action="undo"/>
		<add as="89" control="1" action="redo"/>
		<add as="88" control="1" action="cut"/>
		<add as="67" control="1" action="copy"/>
		<add as="86" control="1" action="paste"/>
		<add as="71" control="1" action="group"/>
		<add as="85" control="1" action="ungroup"/>
		<add as="113" action="edit"/>		
		<add as="123" action="showProperties"/>
		<add as="107" action="zoomIn"/>
		<add as="109" action="zoomOut"/>
	</mxDefaultKeyHandler>
</mxEditor>

然后你可以这样绑定快捷键:

var container = document.getElementById("main");
var config = "./editors/config/keyhandler-commons.xml";
var node = mxUtils.load(config).getDocumentElement();
var editor = new mxEditor(node);
editor.setGraphContainer(container);
var graph = editor.graph;

这样就能绑定快捷键了,每个键的动作都在xml中定义了,但后来工作中发现如果页面中有两个mxGraph实例,那么快捷键只会在第一次绑定时有效,后面的都无效,比如按照代码流程我A、B实例都绑定了快捷键但只有A起作用,即使焦点切到container也无效。反过来代码流程B、A依次绑定快捷键也只有B起作用,我分析了一下估计是快捷键在绑定时监听了整个DOM文档,而不是在container上监听,所以导致即使你所有实例都绑定了快捷键并且焦点在其它container上,但快捷键仍然只会对第一个操作。后来通过研究摸索找到了问题解决方法,在活跃的mxGraph开启监听功能,非活跃的mxGraph实例关闭监听功能即可。

// 关闭editor1实例的快捷键监听
editor1.keyHandler.handler.enabled = false;

// 开启editor2实例的快捷键监听
editor2.keyHandler.handler.enabled = true;

因为监听的特殊性,所以快捷键的设置只会在第一个设置为true的起作用。

文字链接:《mxGraph快捷键的绑定以及多个实例快捷键切换处理

文章地址:http://www.qttc.net/201312392.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 0

    Hi,你想第一个做沙发么?