代码之家  ›  专栏  ›  技术社区  ›  adamJLev

在jQuery中使用“类/对象”MooTools样式的事件

  •  0
  • adamJLev  · 技术社区  · 16 年前

    MooTools的一个优点是,它可以让您轻松地为对象分配/触发事件,例如:

    var playerSingleton = new (new Class({
      Implements: [Events],
    
      initialize: function() {},
    
      setVolume: function() { 
        // do some stuff..
        this.fireEvent('volumeChanged')
      }
    
    }));
    
    // Somewhere else...
    
    playerSingleton.addEvent('volumeChanged', function() {
      // do something when volume changes
    });
    
    playerSingleton.setVolume(75);
    // bam our event fires.
    

    用jQuery怎么做这样的事情? .bind .trigger

    $(window).bind('volumeChanged', fn);
    

    还有比这更好的方法吗,更像MooTools方法?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Anurag    16 年前

    this discussion 从去年开始,我一直在尝试同样的想法。

    player是一个常规对象,具有设置音量的方法,并为音量更改添加侦听器。 an example here .

    var player = {
        setVolume: function() {
            $(this).trigger("volumeChanged");
        },
    
        addVolumeChangeHandler: function(fn) {
            $(this).bind("volumeChanged", fn);
        }
    };
    
    // add a listener
    player.addVolumeChangeHandler(function() {
        alert("volume has been changed");
    });
    
    // change volume (should fire the attached listener)
    player.setVolume(); // alerts "volume has been changed"