类中可重用的事件侦听器回调

时间:2019-02-19 08:46:12

标签: javascript

我用纯JS编写代码,并且需要在类中为事件侦听器使用可重用的回调。必须满足以下条件:

  • 可被其他功能重用
  • 事件监听器需要其他功能可撤销
  • 我需要传递参数(事件)
  • 我需要能够从回调(this.doSomething())调用另一个函数

我尝试将回调定义为方法以及函数表达式,但是每次我解决一个问题时,都会发生另一个问题。我在这里也经历了许多问题,但仍然无法使我的代码正常工作。

class Foo {

    constructor() {
        functionA()

        this.howAndWhereToDefineThisCallback = function(event) {
            event.preventDefault();
            this.doSomething();
        }
    }



    functionA() {
        let el = document.getElementById('element1');

        el.addEventListener( 'click', howAndWhereDefineThisCallback );

        this.functionB();
    }



    functionB() {
        let el = document.getElementById('element1');

        el.removeEventListener( 'click', howAndWhereToDefineThisCallback );
    }



    doSomething() {
        // something meaningful
    }
}

如何修改我的代码以按照我刚才描述的方式使用它?

2 个答案:

答案 0 :(得分:1)

这里有一个实现:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes) {
        routes.Ignore("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "device", action = "view", id = UrlParameter.Optional });
    }
}
email, email, phone, phone, phone, name, address
jo@doe.com, re@ko.com, 90192, 2980, 9203, John Doe, 82 High Street
re@doe.com, az@ko.com, 1341, 55, 665, Roe Jan, 11 Low Street
red@doe.com,,, 55, 111, Roe Jan, 11 Low Street

答案 1 :(得分:0)

如果要重用回调函数,只需将其放在类范围之外即可。为了从回调中调用另一个函数,只需将该函数作为回调的参数即可,例如:

var howAndWhereToDefineThisCallback = function(event, anotherCallback) {
        event.preventDefault();
        if (anotherCallback) anotherCallback();
}

要在您的类方法中使用回调:

el.removeEventListener( 'click', function(event) {
   howAndWhereToDefineThisCallback(event, this.doSomething);
});