1
;(function ($, w, d, config, undefined) {
$.fn.pluginName = function ( options, config ) {
    var pluginName = this;
    var defaults = {
        //defaults
    };
    var settings = $.extend({}, defaults, options);

    var methods = {
        init :  function ( settings, options ) {
            //init stuff here
        }
    }
})
})(jQuery, window, document)

// HTML looks like this
<script>
$('.item').pluginName({ methods : 'init' });
</script>

私はプラグイン開発とオブジェクト全般に不慣れですが、スイミーなしで深いところを学ぼうとしています。:)

基本的に、メソッド変数内で「init」関数を呼び出して、プラグインを初期化したいと考えています。私のプラグインの名前は「pluginName」です。

「メソッド」という名前の変数内に存在するため、「init」fn を呼び出すのに問題があります。

また、これをさらに一歩進めるには、ページ上のすべての「アイテム」クラスを収集し、データ変数内に設定する必要があります。私のinit関数には次のものがあります:

return this.each(function(){

    var $this       = $(this),
    data        = $this.data('pluginName');

    if ( ! data ) {
        $(this).data('pluginName', {
        target : $this
        });

    }
}).bind(this);

上記は「this.eachは関数ではありません」を返します

どんな助けでも大歓迎です!どうもありがとう!!

4

1 に答える 1

2

メソッド呼び出しのためにオブジェクトを渡す必要がないようにするために、私は通常、次の形式を使用します。

(function($) {
    function doSomething() {
        // Only callable in this plugin's context (I think)
    }

    var methods = {
        init: function (options) {
            // Do whatever for init!
            doSomething();
        },

        anotherMethod: function (options) {
            // Some other method
            doSomething();
        }
    };

    $.fn.pollServer = function(method) {
        var args = arguments;
        var argss = Array.prototype.slice.call(args, 1);

        return this.each(function () {
            $this = $(this);
            if (methods[method]) {
                methods[method].apply($this, argss);
            }
            else if (typeof method === "object" || !method) {
                methods.init.apply($this, args);
            }
            else {
                $.error("Method " + method + " does not exist on jQuery.pollServer");
            }
        });
    };
})(jQuery);

そして、次のようにアクセスします。

$("#div").pollServer({});
$("#div").pollServer("init", {}); // Same as above line

$("#div").pollServer("anotherMethod", {});

return this.each() 内のすべてが、呼び出すメソッドを決定し、選択された jQuery 要素として「this」変数を設定します。また、追加の引数をメソッドに渡します。

お役に立てれば!

于 2012-06-28T15:59:12.873 に答える