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
,但似乎唯一的方法是将事件绑定(bind)/触发到窗口对象:
$(window).bind('volumeChanged', fn);
还有比这更好的方法吗?更像 MooTools 方法吗?
最佳答案
jQuery 的绑定(bind)和触发器似乎适用于普通对象。还没有看到源代码来了解它是如何工作的(如果它是公共(public) API 的一部分),但它确实如此。请参阅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"
关于javascript - 在 jQuery 中使用 "class/object"MooTools 风格的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625122/