这个问题涉及我之前的问题(jQuery plugin click instance issue & design pattern feedback)。我之前的问题更侧重于我使用的设计方法。
我想将click事件绑定到我调用脚本的元素:
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);
答案 0 :(得分:1)
您可以使用this
代替self
。当您在self
嵌套函数中使用this
时使用bind
,其中this
引用另一个对象。我看到self
变量未绑定到_bindEvents
或toggle
函数中的任何内容。
Howerver,如果您想使用self
,请通过撰写SidebarNav
将其声明为this.self=...
的属性,并将其用作console.log(this.self)
。