mxGraph为读取出来的mxe或xml图添加cell事件(禁止cell拖拽修改)
?
?
?为了模仿mxGraph中javascript里面的例子中的userobject.html展示出来的效果,可费了不少功夫,花费了大半天的时间,先总结如下:
? 其一:userobject.html中的并没有读取任何mxe或者xml文件,它里面的都是自己造的XML文件,我要做的是先用CS端的Graph画好一张图生成mxe然后进行处理在读出来
? 其二:userobject.html显示出来的效果图有单击事件,每单击一个cell(vertex或者edge)都会在右边显示出来一个表单用来展现其全部属性内容。它的缺陷就是,看图的人可以随便拖动并修改cell中的内容,所以我要做的是,能单击事件但不要进行拖动
? 其三:mxGraph的拖动效果与graph.setEnabled(false)这个方法是挂钩的,设置true就表示可拖拽修改,反之就不可以,需要说明的是,我们单击的时候肯定是要获取每个cell的内容的,然而,如果你在设置为false的情况下使用
?graph.getSelectionModel().addListener(mxEvent.CHANGE, function(sender, evt)
????{
?????selectionChanged(graph);//显示属性面板
????});
这个监听器就获取不到CELL的值,因为我的selectionChanged方法中使用到了cell,之前我在selectionChanged方法里面是通过var cell = graph.getSelectionCell()来获取cell的,这种情况下如果我利用了上面的那个监听器并且设置
graph.setEnabled(false)那么肯定不会触发事件并显示表单,如果在这种情况下设置graph.setEnabled(true)那么一定可以触发得到表单,之后我有试了其他的监听器
??? graph.addListener(mxEvent.CLICK, function(sender, evt)
????{
?????selectionChanged(graph);
???? });
前提是graph.setEnabled(false)了也是不行的,后来这样试了双击的都不可以于是我就想这中间肯定是cell获取不对的问题,后来参考了script其他的两个例子如overlays的单击监听器中
?graph.addListener(mxEvent.CLICK, function(sender, evt)
????{
?????var cell = evt.getProperty('cell');
??? 。。。
??? }
?大家发现什么了吗?对了可以通过evt来获取到单击时的cell而不必像原来那样graph.getSelectionCell()来获取选中的了,这样修改下
?graph.addListener(mxEvent.CLICK, function(sender, evt)
????{
?????cell= evt.getProperty('cell');
?????selectionChanged(graph,cell);
????});
????selectionChanged(graph,cell);
哈哈哈,终于成功了,终于在禁用托债修改cell的情况下触发事件并显示表单详细内容了,现在贡献代码如下
??
?
?
<mxGeometry x="0" y="0" width="80" height="70" as="geometry"/>
</mxCell>
<mxCell style="symbol;image=images/img/server.jpg" vertex="1" parent="1"> <mxGeometry x="310" y="290" width="32" height="32" as="geometry"/> </mxCell> 5 楼 JavaCrazyer 2010-04-12 我的主要是读取CS端JGRAPH画出来的图的,你参考下fileio.html或许会有所收获 6 楼 zxh168 2010-04-12 JavaCrazyer 写道我的主要是读取CS端JGRAPH画出来的图的,你参考下fileio.html或许会有所收获
你是用JGRAPH生成的图呀,我是用自己带的那个editor里面的画的,所以形成的图可能和那个格式不一样吧 7 楼 JavaCrazyer 2010-04-12 你如果用grapheditor那个程序里面画的生成的图形就我的程序就能读取出来 8 楼 zxh168 2010-04-13 就JavaCrazyer 写道你如果用grapheditor那个程序里面画的生成的图形就我的程序就能读取出来
你的程序?你自己写的,还是用mxgraph的。能不能给我一份呢?O(∩_∩)O~ 9 楼 JavaCrazyer 2010-04-13 晕倒,我意思是说mxGraph源代码示例中不是有个grapheditor的JAVA程序吗,你将它运行起来然后画张图,之后保存,我上面写的代码就能读取出来了 10 楼 xiaotiantian-58 2012-02-11 想请教一下,页面上老是弹出来this.undomanager为空或不是对象是什么原因?
mxEditor.prototype.resetHistory = function() {
this.lastSnapshot = new Date().getTime();
this.undoManager.clear();
this.ignoredChanges = 0;
this.setModified(false);
};
把这个方法重写注释掉this.undoManager.clear();这句,有影响嚒? 11 楼 donggongai 2012-02-21 直接用graph的setcellslocked不就行吗?