Javascript 外部触发拉斐尔事件

Javascript 外部触发拉斐尔事件,javascript,cucumber,dom-events,raphael,Javascript,Cucumber,Dom Events,Raphael,我的应用程序使用Raphaël将一组对象放到一个页面上,每个对象都绑定了一个click处理程序,该处理程序在通过JSON加载对象时使用附加到该对象的数据。一切都很好 我现在正在尝试使用Cucumber添加一些测试覆盖率(是的,我知道我应该首先构建测试,我下次会这样做)。我需要触发对第一个对象的单击,以测试该对象的关联页面加载。我已经尝试为该对象找到合适的SVG路径,并针对该对象触发一个click事件,但这不起作用。我还尝试将每个Raphaël集合放到一个全局可用的对象中,但无法解决如何针对相应的

我的应用程序使用Raphaël将一组对象放到一个页面上,每个对象都绑定了一个
click
处理程序,该处理程序在通过JSON加载对象时使用附加到该对象的数据。一切都很好

我现在正在尝试使用Cucumber添加一些测试覆盖率(是的,我知道我应该首先构建测试,我下次会这样做)。我需要触发对第一个对象的单击,以测试该对象的关联页面加载。我已经尝试为该对象找到合适的SVG路径,并针对该对象触发一个
click
事件,但这不起作用。我还尝试将每个Raphaël集合放到一个全局可用的对象中,但无法解决如何针对相应的Raphaël
单击事件触发Raphaël
事件

要提出一些具体问题:

1) 如何手动触发Raphaël事件

2) 如果您引用了Raphaël集合所拥有的SVG元素,是否可能触发上述事件


3) 如果没有,是否可以访问raphael所持有的当前集合?

我发现,首先找到raphael对象,然后遍历DOM可以找到其事件处理程序的函数。对于我来说,单击事件是第0个事件

所以为了触发它,我所做的就是:

 raphobj.events[0].f();

但是要小心,因为如果在单击事件中引用“this”,它将不起作用。

您可以将此自定义方法添加到raphael元素中:

Raphael.el.trigger = function(eventName){
    for(var i = 0, len = this.events.length; i < len; i++) {
        if (this.events[i].name == eventName) {
            this.events[i].f.call(this);
        }
    }
}

太好了,谢谢。这给了我获取数据所需的提示。这应该是拉斐尔的一部分。
var r = paper.rect(0,0,100,100).attr({"fill": "#f00"});

r.click(function(){
    this.attr("fill": "#0f0");
});

r.trigger("click");