2010-04-12 64 views
0

一个关于MooTools的好东西,就是它可以让你轻松地分配/火事件的对象,例如:使用“类/对象” MooTools的风格事件的jQuery

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

jQuery的绑定和触发器似乎适用于普通对象。没有看到源代码来看它是如何工作的(如果它是公共API的一部分),但它确实如此。见去年this discussion围绕同样的想法。

播放器是一个常规对象,具有设置音量的方法以及为音量更改添加监听器。 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" 
+0

让我试试这个..谢谢! – adamJLev 2010-04-13 14:00:07