2013-03-01 127 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的財產。