0

Jqueryプラグインを構築しています。私のスケルトンコードは次のとおりです。

(function (window, document, $, undefined) {

    var methods = {
        init : function(options){
        },
        func_1: function(){
        },
        func_2: function(){
        }
    };

    $.fn.myplugin = function(args){

        if ( methods[args] )
        {
            return methods[ args ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        }
        else if ( typeof args === 'object' || ! args ) 
        {
            var opts = $.extend({}, $.fn.myplugin.defaults, args);
            var new_args = new Array(opts);
            return methods.init.apply( this, new_args );
        }
        else 
        {
            $.error( 'Method ' +  args + ' does not exist' );
        }
    };

    $.fn.myplugin.defaults = {
         func_1: function(){},
         func_2: function(){}
    };

}(window, document, jQuery));

このプラグインを拡張して、JQueryに関数を追加できるようにしたいと考えています。だから、私はこれらの関数を以下のように呼び出したいと思います:

$.myplugin.new_func();

どうすればよいですか?私はおそらく使用する必要があることを知っています$.extendが、それをどうやって行うのかわかりません。

前もって感謝します。

4

2 に答える 2

0

$.fn.mypluginと$.mypluginの違いは、後者にはコンテキストがないことです。したがって、次のコードを使用して後者を定義できます。$ .mypluginの結果でチェーンを使用するには、.new_func()メソッドを使用するオブジェクト(特定のjQueryオブジェクトなど)を返す必要があります。

$.myplugin = function () {
   ...
   return $('body');
};
于 2012-11-21T15:29:25.750 に答える
0

さて、いくつかの古いJQueryプラグイン(特にFancyBox 2)を試した後、私はこれを行う方法を見つけることができました。以下はスケルトンコード全体です。

(function (window, document, $, undefined) {

    var methods = {
        init : function(options){
        },
        func_1: function(){
        },
        func_2: function(){
        }
    };

    $.fn.myplugin = function(args){

        if ( methods[args] )
        {
            return methods[ args ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        }
        else if ( typeof args === 'object' || ! args ) 
        {
            var opts = $.extend({}, $.fn.myplugin.defaults, args);
            var new_args = new Array(opts);
            return methods.init.apply( this, new_args );
        }
        else 
        {
            $.error( 'Method ' +  args + ' does not exist' );
        }
    };

    $.fn.myplugin.defaults = {
        func_1:     function(){},
        func_2:     function(){}
    };

    //below is the code I added to get the desired functionality
    var D = $.myplugin = function(){};
    $.extend(D, {
        new_func: function(){
            //add functionality here
        }
    });

}(window, document, jQuery));

new_funcオブジェクト内で関数(呼び出されるなど)を定義し、methodsを使用して新しい関数から以下で呼び出すこともできますmethods.new_func()

乾杯。

于 2012-11-21T16:26:03.193 に答える