jQuery插件绑定问题

时间:2013-03-01 18:27:15

标签: jquery jquery-plugins bind instance

这个问题涉及我之前的问题(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);

1 个答案:

答案 0 :(得分:1)

您可以使用this代替self。当您在self嵌套函数中使用this时使用bind,其中this引用另一个对象。我看到self变量未绑定到_bindEventstoggle函数中的任何内容。 Howerver,如果您想使用self,请通过撰写SidebarNav将其声明为this.self=...的属性,并将其用作console.log(this.self)