【问题标题】:Triggering Raphael events externally从外部触发 Raphael 事件
【发布时间】:2012-08-21 16:55:44
【问题描述】:

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

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

提出一些具体问题:

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

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

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

【问题讨论】:

    标签: javascript cucumber dom-events raphael


    【解决方案1】:

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

    【讨论】:

    • 这应该是 Raphael 的一部分。
    【解决方案2】:

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

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

     raphobj.events[0].f();
    

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

    【讨论】:

    • 太好了,谢谢。这给了我获取数据所需的提示。
    猜你喜欢
    • 2015-05-28
    • 1970-01-01
    • 2011-04-05
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多