1

我正在使用Raphaël绘制图形(网络),因为节点被表示并显示为圆圈。用户可以通过点击画布来动态添加节点,然后将新构建的Element对象推入一个Set,也推入一个模型对象,其中存储了一些关于刚刚创建的节点的宝贵数据。

当用户将鼠标指针移到节点上时,我想在每个节点附近显示模型中提到的数据。我希望避免的是在创建时在每个节点上创建一个新事件。我想将事件委托给画布,以便为每个节点提供一个全局处理程序。

我已经创建了这样的处理程序并将事件附加到它:

var Paper    = Raphael('Graph',600,600),
    $Canvas  = $(Paper.canvas),
    onMouseOver = function(e){
      // Wish to have an Element object
    }

$Canvas.on('mouseover','circle',onMouseOver);

该事件和处理程序工作正常,因为它只在圆圈上触发。

我怎样才能检索或将它作为一个Element对象,并访问它.data()和每个关联?我必须在我的 中搜索它Set吗?如果是这样,怎么做?

4

1 回答 1

1

假设您的集合中的元素由 Raphaël 标识,Element.id那么当您创建新元素时,您可以将等效的 id 分配给 DOM 节点

newElement = Paper.circle(x, y, r);
newElement.node.id = newElement.id;

然后在您的鼠标悬停处理程序中,您可以从event.target

onMouseOver = function(e){
  var elemId = e.target.id;
  //find your element in the set by this id to get the precious data
}
于 2013-04-02T21:32:08.633 回答