0

この質問は、私の以前の質問 ( jQuery プラグイン クリック インスタンスの問題とデザイン パターンのフィードバック) を参照しています。私の前の質問は、私が使用する設計アプローチに焦点を当てています。

スクリプトを呼び出した要素にクリック イベントをバインドしたい:

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

1 に答える 1

1

thisの代わりに使用できますself。whereが別のオブジェクトを参照する場合など、ネストされた関数で何を使用するself場合に使用します。ご覧のとおり、変数はまたは関数内の何にもバインドされていません。ただし、 を使用する場合は、 のプロパティとして宣言し、 として使用してください。thisbindthisself_bindEventstoggleselfSidebarNavthis.self=...console.log(this.self)

于 2013-03-01T18:47:46.773 に答える