2

SuperfishJSはこちらです。

関連するコードは次のとおりです。

$.fn.extend({
    hideSuperfishUl : function() {
        // ...code here...
        return this;
    },
    showSuperfishUl : function(){
        // ...code here...
        return this;
    }
});

質問:

$.fn.extend({...});ユーザーがオーバーライドして機能することを許可しますhideSuperfishUlshowSuperfishUl?その場合、プラグインを呼び出すときにこれらのメソッドを変更する構文はどのようになりますか?

<script> 

    $(document).ready(function() { 
        $('ul.sf-menu').superfish(); // How to override hideSuperfishUl &/or showSuperfishUl?
    }); 

</script>

Superfishはしばらく前に書かれました...これは、ユーザーがプラグイン機能の関数/メソッド/その他をオーバーライドできるようにするための最良の方法ですか?そうでない場合、「最良の」方法はありますか?

4

1 に答える 1

2

ここで私自身の質問に答えようとしています...以下に書いたものが間違っている場合は訂正してください!;)


この記事はこれを言います:

拡張する

私の意見では、これはjQueryプラグインを作成するための最も慣用的な方法ではありません。jQuery.fn.extend代わりにメソッドを 使用しますjQuery.fn.pluginName

(function($){
  $.fn.extend({
      myPlugin: function() {
          return this.each(function(){
              // do something
          });
      },
      myOtherPlugin: function() {
          return this.each(function() {
              // do something
          });
      }
  });
})(jQuery);

この構造は、jQueryに多数のプラグインメソッドを追加する必要がある場合に役立ちます。ただし、プラグインがその数のメソッドを追加する必要がある場合は、その実装を構造化するためのより良い方法があるかもしれないと私は主張します。

extendメソッドは、他のJSライブラリから移行するプログラマーによってより多く使用されているように感じます。個人的には、単純な$.fn.pluginName =構造の方が読みやすく、jQueryプラグインで通常表示されるものと一致していると思います。

Superfish JSは、上記の引用と同じコードを使用しています。簡単に言えばshowSuperfishUl()、jQuery名前空間hideSuperfishUl()追加プラグインです。$.fn

私は次のように前述の関数をオーバーライドすることができました:

jQuery(function(){

    $.fn.showSuperfishUl = function() {
        console.log('OMG');
        return this;
    };

    $.fn.hideSuperfishUl = function() {
        console.log('BECKY');
        return this;
    };

    jQuery('ul.sf-menu').superfish();
});

次に、この記事は次のように述べています。

必要に応じて、二次機能へのパブリックアクセスを提供する

// plugin definition
$.fn.hilight = function(options) {
  // iterate and reformat each matched element
  return this.each(function() {
      var $this = $(this);
      // ...
      var markup = $this.html();
      // call our format function
      markup = $.fn.hilight.format(markup);
      $this.html(markup);
  });
};
// define our format function
$.fn.hilight.format = function(txt) {
  return '<strong>' + txt + '</strong>';
};

オプションオブジェクトで、デフォルトのフォーマットをオーバーライドするためのコールバック関数を提供できる別のプロパティを簡単にサポートすることもできます。これは、プラグインのカスタマイズをサポートするもう1つの優れた方法です。ここに示す手法は、フォーマット関数を実際に公開して再定義できるようにすることで、これをさらに一歩進めています。この手法を使用すると、他の人がプラグインの独自のカスタムオーバーライドを出荷することが可能になります。つまり、他の人があなたのプラグインのプラグインを作成できることを意味します。

結論:

$.fn.extendとはどちら$.fn.pluginName.functionも類似しており、エンドユーザーが機能を簡単にオーバーライドできるようにします。前者はjQuery名前空間に新しいプラグインを追加します$.fnが、後者は単一の$.fn.pluginName名前空間内に含まれる関数です。

まとめとベストプラクティスによると:

プラグインごとに複数の名前空間でjQuery.fnオブジェクトを乱雑にしないでください。

...したがって、「最良の」テクニックを選ぶのはです$.fn.pluginName.function

于 2012-07-04T20:25:38.817 に答える