この質問は、私の以前の質問 ( jQuery プラグイン クリック インスタンスの問題とデザイン パターンのフィードバック) を参照しています。私の前の質問は、私が使用する設計アプローチに焦点を当てています。
スクリプトを呼び出した要素にクリック イベントをバインドしたい:
main.js
$('nav ul li a.has-sub').sidebarNav();
トグルの問題: self は実際のインスタンスを返しませんが、常に最後のインスタンスを返します - これを解決するにはどうすればよいですか?
toggle : function(){
console.log(self); // Should return the right instance, but it doesn't!
}
私のプラグインでは:
_bindEvents : function(){
self.$elem.bind('click.sidebarNav', self.toggle);
},
jquery.sidebarNav.js
;(function($){
"use strict";
var SidebarNav = function(element, options){
this._init(element, options);
}
SidebarNav.prototype = {
_init : function(element, options){
var self = this;
self.elem = element;
self.$elem = $(element);
self.options = $.extend( {}, $.fn.sidebarNav.defaults, options);
self._bindEvents();
},
_bindEvents : function(){
self.$elem.bind('click.sidebarNav', self.toggle);
},
toggle : function(){
console.log(self);
}
}
$.fn.sidebarNav = function(options) {
return this.each(function(){
var instance = new SidebarNav(this, options);
$.data(this, 'sidebarNav', instance);
});
}
$.fn.sidebarNav.defaults = {}
})(jQuery);