2011-09-07 46 views
0

我需要畫一些表之間的關係,就像是在做Wwwsqldesigner的Qooxdoo:SVG和元素行動質疑

但我想知道之前的的Qooxdoo某些方面。

如果我把所有的結構爲SVG,並使用拖動矩形與內部文本顯示錶的關係,我可以定義「ondrag當」函數來重繪SVG的部件,如路徑?

或者我必須重繪父母元素 (如在freedraw實現它)的鼠標反應svg元素?如果是這樣,我怎麼能找到光標下的元素,被點擊?

回答

1

的SVG的contrib需要的Qooxdoo事件和本地(DOM)事件之間的區別的照顧,所以你甚至可以做到這一點的」的Qooxdoo方式」,並註冊單擊處理直SVG元素:

var rect = new svg.shape.Rect; 
rect.addListener("click", function(e) { 
    alert("Clicked the rect"); 
}, this); 

事件對象給你的DOM元素,而不是對象的Qooxdoo。但是,你可以找出哪些對象的Qooxdoo用戶點擊時,通過使用一些的Qooxdoo的內部是這樣的:

rect.addListener("click", function(e) { 
    var obj = qx.core.ObjectRegistry.fromHashCode(ev.getCurrentTarget().$$element); 
    //obj === rect !! 
}, this); 

的SVG元素類不支持拖曳事件。但是你可以使用mousedown和mouseup事件來實現拖拽。在SVG的contrib,存在svg.behavior.Draggable基本實現的是,您可以使用這樣的:

//this is enough to make the rect draggable 
var draggable = new svg.behavior.Draggable(rect); 

目前,可拖動類是不是所有的有用但並沒有很多功能,但是您可以將其用作如何實現自己的實現的示例。

順便說一下,Draggable類將mousedown偵聽器附加到SVG元素,並將mousemove和mouseup偵聽器附加到元素的父級(如freedraw演示)。這是因爲它可以將鼠標移出矩形的同時拖動,如果移動足夠鼠標快。即使用戶沒有釋放鼠標按鈕,也會導致拖動停止。

0

您可以點擊事件的DOM元素註冊:

var element = document.getElementById("table1"); 
qx.event.Registration.addListener(element, "click", function(e) { 
    alert("click"); 
}, this);