2013-03-01 84 views
0

此问题涉及我之前的问题(jQuery plugin click instance issue & design pattern feedback)。我之前的问题更多关注我使用的设计方法。jQuery插件绑定问题

我想click事件绑定到我调用的脚本元素:

main.js

$('nav ul li a.has-sub').sidebarNav(); 

与切换的问题:自不返回实际的实例,但总是最后一个例子 - 如何解决这个问题?

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); 

回答

1

可以使用this而不是self。使用self当你在嵌套函数中使用this时,例如bind,其中this引用另一个对象。正如我所看到的self变量未绑定到_bindEventstoggle函数中的任何内容。 如果您想使用self,Howerver通过编写this.self=...并将其作为console.log(this.self)声明为SidebarNav的财产。