0

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 来完成?我知道有.bindand .trigger,但似乎唯一的方法是将事件绑定/触发到 window 对象:

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

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

4

1 回答 1

4

jQuery 的绑定和触发器似乎适用于普通对象。还没有看到源代码来了解它是如何工作的(如果它是公共 API 的一部分),但它确实如此。请参阅去年的讨论,讨论相同的想法。

player 是一个常规对象,具有设置音量的方法,并为音量变化添加监听器。 一个例子在这里

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"
于 2010-04-12T20:59:26.733 回答