0

私はしばらくjQueryプラグインについて読んでいて、プラグインをより簡単な方法で実装しようとしています。私のマネージャーは ac# の男で、jQuery UI がメソッドを呼び出す方法が嫌いです。私は怒鳴るアプローチを使用したいし、それについてのあなたの意見を知りたい. 私がplzを使おうとしているものの長所と短所を教えてください。わかりました、これは単純なサンプルです。これには作業がありますが、最初は:

if(typeof Object.create !== 'function')
{
    Object.create = function(o)
    {
        function F()
        {
        }
        F.prototype = o;
        return new F();
    };
}
var Car = (function()
{
    var openDoor = function(doorNum)
    {
        alert("door #" + doorNum + " opened");
    };
    return {
        openDoor: openDoor
    };
}
)();
(function($, window, document, undefined)
{
    $.fn.car = function(options)
    {
        if(this.length)
        {
            return this.each(function() {

                var myCar = Object.create(Car);
                $.data(this, 'car', myCar);

                for(var prop in Car)
                {
                    if($.fn[prop] == null)
                    {
                        $.fn[prop] = function(params)
                        {
                            return this.each(function () {
                                if($.data(this, "car") == null)
                                {
                                    throw Error("not implemented function");
                                }
                                $.data(this, "car")[prop](params);
                            }
                            );
                        };   
                    }
                }

            });
        }
    };
})(jQuery, window, document);

$("#test").on("click", function()
              {
                $("#test").car().openDoor(1).css({color: 'red'});
              });

ここにフィドルリンクがあります
http://jsfiddle.net/6zHP7/8/

4

1 に答える 1

1

大事業!私はあなたの上司と同じように、jQuery のプラグイン インターフェイスが高度なプラグインに十分ではないと感じています。

この目的のためだけに GitHub プロジェクトを開始しました。後方互換性を維持しながら、jQuery プラグインにより多くの OOP API を提供することです。

https://github.com/adamovsky/jQuery-Plugin-Pattern

また、それに付随するブログ投稿を書き始めました。

http://milan.adamovsky.com/2012/12/jquery-plugin-pattern-30.html

気軽に参加して貢献してください。

あなたのパターンで見られる問題のいくつかは、.data() の使用など、私のパターンで対処されています。もう 1 つの問題は、プラグインを呼び出すたびにクラスがインスタンス化されることです。

全体として、これは非常に野心的なことであり、解決しないとプラグインを簡単にクラッシュさせたり燃やしたりできるエッジ ユース ケースのため、見た目よりも困難です (以前の OOP と jQuery の結合の試みでわかったように)。 .

ミラノ

于 2012-12-28T20:01:58.167 に答える