使用模块模式编写插件(称为test
)(查询样板; https://github.com/jquery-boilerplate/jquery-boilerplate/blob/master/src/jquery.boilerplate.js。)。
请看这个小提琴:http://jsfiddle.net/3hgTz/
我们有两个div
。对于每个div
:
x()
在$(window)
滚动。上被触发
单击destroy()
时会触发div
。这解除了scroll
方法的绑定。Plugin.prototype = {
bind: function() {
this.element.addClass( 'active' );
$( window ).on( 'scroll.' + pluginName, $.proxy( this.x, this ) );
this.element.on( 'click.' + pluginName, $.proxy( this.destroy, this ) );
},
destroy: function() {
this.element.removeClass( 'active' );
$( window ).off( 'scroll.' + pluginName, $.proxy( this.x, this ) );
// unbinds scroll for all instances!
},
x: function() {
console.log( 'x' );
}
}
问题: destroy()
方法从所有实例中取消绑定x()
,而仅针对已点击的特定实例。
我是否错误地使用jQuery.proxy()
?如何正确绑定和取消绑定plugin.prototype
与/ $(window)
之间的方法?