0

jQuery Plugin で関数を呼び出す方法がわかりません。私はソーシャルシェアラーのような小さなものを作ろうとしています.それは私の最初のプラグインですが、私は混乱しています.

Uncaught TypeError: Object [object Object] has no method '_echoCookie' 

これが何をするかです...

function EchoSoc(element, options) {
    this.element = element;

    this.options = $.extend({}, defaults, options);
    this._defaults = defaults;
    this._name = pluginName;
    this.init();
}

その後、次のinit: function () { }ようなものがあります。

$('body').append( //-->
                '<div id="fb-root" />'
            +   '<script>(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";fjs.parentNode.insertBefore(js, fjs);}(document, "script", "facebook-jssdk"));</script>'
            +   '<script src="//platform.twitter.com/widgets.js"></script>'
            +   '<script src="//apis.google.com/js/plusone.js"></script>'
            // <--
            );

これはサンプルとしての google のテストであるため、最後の 1 つを次に示します。

$('.echoGoogle').append('<g:plusone size="medium" href="' + this.options.google_url + '" callback="googleCB"></g:plusone>');

次に、これらの関数があります。

_echoEvents: function () {
        googleCB = function() {
            this._echoCookie();
        };
    },
    _echoCookie: function () {
        $.cookie('echoSoc', 'done', { expires: 30, path: '/' });
        console.log('cookie added');
    }

しかし、これは単に機能しません...

_echoEvents: function () {
        googleCB = function() {
            this._echoCookie();
        };
    }

さて、私の質問は、init の下の他の関数内で関数を呼び出す方法です... this._functionName(); その下の関数ではなく、init でのみ機能します。前もって感謝します。

4

1 に答える 1

1

_echoCookie変数で呼び出すと_echoEventsthis別のコンテキストを指している可能性があるため、以下のようにする必要があります。したがって、クロージャ変数を使用してメイン オブジェクトへの参照を保持し、内部で使用します。googleCB

_echoEvents: function () {
    var that = this;
    googleCB = function() {
        that._echoCookie();
    };
},
_echoCookie: function () {
    $.cookie('echoSoc', 'done', { expires: 30, path: '/' });
    console.log('cookie added');
}
于 2013-04-28T12:43:52.410 に答える