web-dev-qa-db-ja.com

jQueryプラグイン:コールバック機能の追加

プラグインのコールバック機能を提供しようとしていますが、やや伝統的な方法で動作させたいと思います。

myPlugin({options}, function() {
    /* code to execute */
});

または

myPlugin({options}, anotherFunction());

コードでそのパラメーターを処理するにはどうすればよいですか? 1つの完全なエンティティとして扱われますか?実行コードを配置する場所を知っていると確信していますが、実行するコードを取得するにはどうすればよいですか?このトピックに関する多くの文献を見つけることができないようです。

83
dclowd9901

プラグインでコールバックを実行するだけです:

$.fn.myPlugin = function(options, callback) {
    if (typeof callback == 'function') { // make sure the callback is a function
        callback.call(this); // brings the scope to the callback
    }
};

オプションオブジェクトにコールバックを含めることもできます。

$.fn.myPlugin = function() {

    // extend the options from pre-defined values:
    var options = $.extend({
        callback: function() {}
    }, arguments[0] || {});

    // call the callback and apply the scope:
    options.callback.call(this);

};

次のように使用します。

$('.elem').myPlugin({
    callback: function() {
        // some action
    }
});
164
David Hellsing

あなたの質問を正しく理解しているかどうかわかりません。しかし、2番目のバージョンの場合:これはanotherFunctionをすぐに呼び出します。

基本的に、プラグインは次のような関数のようなものでなければなりません。

_var myPlugin = function(options, callback) {
    //do something with options here
    //call callback
    if(callback) callback();
} 
_

関数objectをコールバックとして提供する必要があるため、function(){...}またはanotherFunction(_()_なし)のいずれかです。

5
Felix Kling

過去からの爆発を取り戻します。

たとえば、次の2つの引数が渡された場合は注意が必要です。

$.fn.plugin = function(options, callback) { ... };

次に、オプション引数なしでプラグインを呼び出しますが、コールバックを使用すると、問題が発生します:

$(selector).plugin(function() {...});

これを使用して、もう少し柔軟にします。

if($.isFunction(options)) { callback = options }
4
Sam Potts

これはあなたを助けるかもしれないと思う

// Create closure.
(function( $ ) {
  
   // This is the easiest way to have default options.
 
        var settings = $.extend({
            // These are the defaults.
 
            onready: function(){},
 
            //Rest of the Settings goes here...
        }, options );
 
    // Plugin definition.
    $.fn.hilight = function( options ) {
 
        //Here's the Callback
        settings.onready.call(this);
 
        //Your plugin code goes Here
    };
  
// End of closure.
  
})( jQuery );

独自のjQueryプラグインの作成に関する記事を共有しましたが、 http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/ を確認する必要があると思います

3
Shubham Kumar

プラグイン関数を変更して、2番目のパラメーターを取得します。ユーザーが関数を渡すと仮定すると、そのパラメーターは通常の関数として扱うことができます。
コールバックをオプションパラメーターのプロパティにすることもできます。

例えば:

$.fn.myPlugin = function(options, callback) {
    ...

    if(callback)        //If the caller supplied a callback
        callback(someParam);

    ...
});
1
SLaks

例は少し遅れていますが、役に立つ場合があります。引数を使用すると、同じ機能を作成できます。

$.fn.myPlugin = function() {
    var el = $(this[0]);
    var args = arguments[0] || {};
    var callBack = arguments[1];
    .....
    if (typeof callback == 'function') {
        callback.call(this);
    }
}
0
Draka