2013-03-01 2 views
0

Этот вопрос относится к моему предыдущему вопросу (jQuery plugin click instance issue & design pattern feedback). В моем предыдущем вопросе основное внимание уделяется используемому дизайну.jQuery plugin bind issue

Я хочу, чтобы связать событие щелчка к элементу я вызвавший сценарий на:

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 не связана ни с чем в функциях _bindEvents или toggle. Howerver, если вы хотите использовать self, объявите его как собственность SidebarNav, написав this.self=... и используйте его как console.log(this.self).