从外部触发拉斐尔事件

时间:2012-08-21 16:55:44

标签: javascript javascript-events cucumber raphael

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

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

提出一些具体问题:

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

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

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

2 个答案:

答案 0 :(得分:8)

您可以将此自定义方法添加到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");

答案 1 :(得分:4)

我发现首先找到raphael对象,然后遍历DOM允许我找到它们的事件处理程序的功能。对于我的,click事件是第0个事件。

所以我要做的就是触发它:

 raphobj.events[0].f();

但要小心,因为如果在点击事件中你引用'this'它将不起作用。