3

シンプルな jQuery プラグインを作成しようとしています。次のようにチェーンされたメソッドを呼び出したいと思います。

$("#div").myPlugin({
    /* options */
}).add(".span", {
    /* options */
}).add(".span", {
    /* options */
}).run();

次のような呼び出しの基本的なチュートリアルをいくつか見つけました。

$("#div").myPlugin("add", "foo");

また

container = $("#div").myPlugin();
container.myPlugin.add("foo");
container.myPlugin.run();

しかし、それは私が望むものではありません。基本的なチュートリアルはどこでもほぼ同じで、何をググればいいのかわかりません。

jQuery チュートリアルでは、連鎖性を維持する方法を示しています。

私が知っている唯一の方法は、すべてのメソッドのプラグインを作成することですが、それは私には汚いようです。

jQuery.fn.myPlugin = function(); // returns this
jQuery.fn.myPluginAdd = function(); // returns this
jQUery.fn.myPluginRun = function();
$("#div").myPlugin().myPluginAdd("item1").myPluginRun();

前もって感謝します!

4

2 に答える 2

1

あなたが「それは私にとって汚いようだ」と言ったように、それはまさにあなたが言及したjQueryページが言っていることです:

どのような状況でも、1 つのプラグインが jQuery.fn オブジェクトで複数の名前空間を要求するべきではありません。

(function( $ ){

  $.fn.tooltip = function( options ) { 
    // THIS
  };
  $.fn.tooltipShow = function( ) {
    // IS
  };
  $.fn.tooltipHide = function( ) { 
    // BAD
  };
  $.fn.tooltipUpdate = function( content ) { 
    // !!!  
  };

})( jQuery );

Chainability は、あなたのリターンがすべてです。プラグインからメソッドを連鎖させたい場合は、メソッドを含むオブジェクトを返す必要があります。フィドル: http://jsfiddle.net/ma4nj/

ご覧のとおり、最初に を呼び出すとyourPlugin()、プラグイン メソッドを含むオブジェクトが返されます。そうすれば、クラスyourPluginにある他のメソッドと連鎖できます。Methods

() 関数を見るaddと、インスタンスを再度返したことがわかります。ここで新しいことは何もありません。先ほど説明したように、メソッドを連鎖可能にするためにそうしたのです。

試してみて、独自のメソッドを追加してみてください。その手法では、プラグイン メソッドを jQuery メソッドと連鎖させることはできないことに注意してください。実際には、次のようにプラグインチェーンを無効にするメソッドをプラグイン内に追加するとできます: http://jsfiddle.net/ma4nj/1/

おそらく私がやったことを行うためのより良い方法がありますが、とにかくそれが役立つことを願っています.

于 2013-01-11T08:55:27.847 に答える
1

Bombastic、プラグインについては、ネットで利用できる最高のチュートリアルが以下にあります:

https://tutsplus.com/author/jeffreyway/?q=true&filter_topic=35

彼の jquery プラグインのビデオを見ました。それを見て学ぶことができて本当に良かったです。

于 2013-01-11T04:38:30.947 に答える