5

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

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

提出一些具体问题:

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

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

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

4

2 回答 2

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");
于 2014-01-09T13:19:16.533 回答
4

我发现首先找到 raphael 对象,然后遍历 DOM 可以让我找到他们的事件处理程序的功能。对于我来说,点击事件是第 0 个事件。

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

 raphobj.events[0].f();

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

于 2012-08-30T15:33:05.750 回答