0

MooTools の優れた点の 1 つは、イベントをオブジェクトに簡単に割り当て/起動できることです。たとえば、次のようになります。

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 のアプローチのように、これより優れたものはありますか?

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 に答える