0

だから今日、次の例とテンプレートを見た後、jquery プラグインの開発について読むことにしました

CSS-Tricks.com プラグイン テンプレート Longpress.js

さて、次の質問があります。

@Css-トリック:

  • なぜ彼は名前付きのパラメーターを持っているのelですか?また、そのことはどこで初期化されたのでしょうか?
  • 彼が DOM オブジェクトへの逆参照を追加しているのはなぜですか?
  • なぜ彼はvar methods = {//...}、jQuery のドキュメントで想定されているシステムを使用しないのでしょうか?

@長押し

  • また、なぜ彼は jquery 公式のパターンを使用しないのですか?
  • 彼、つまり彼のmousewheel()メソッドがプラグインの名前空間にバインドされていないのはなぜですか?
  • それはすべて悪い習慣ですか、それともより良い方法ですか?

前もって感謝します

編集:

ここでは、これは具体的すぎるかもしれないと言われました。だから私はそれを別の方法で定式化しようとします。プラグイン開発に関する公式ドキュメントに、他の方法で処理すべき問題や悪いアドバイスはありますか?

4

3 に答える 3

2

できるだけ多くの質問に答えようと思います。

「公式」の jQuery パターンは単なる提案です。これはベスト プラクティスを示すものであり、決定的なものではありません。とは言っても、それはとても良いです、私は他に何も使いません. 「スーパーバイザー」セクション (コードの最後にある) は非常に巧妙です。

CSS トリック

このパターンの最悪の側面は$、名前空間と$.fn名前空間の両方にメンバーを配置することです。前者は、たとえば jQuery の「公式」パターンを使用して回避できます。

el$.yourPluginName()fromに渡される仮変数$.fn.yourPluginName()であり、プラグインが呼び出される jQuery セレクション内の各要素を順番に表します。

作成者がプラグインのパブリック メソッドにどのように対応しているかはよくわかりません。

長押し

これははるかに優れたパターンです。$.fn名前空間に 1 つのメンバーを配置します。それ以外はすべて「プライベート」です (最も外側のクロージャに保持されます)。

パブリック メソッドは必要なく、提供されません。

mousewheelコード自体はプラグインではありません。「アドオン」として分類する方が適切かもしれません。はmousewheelイベント タイプを jQuery に追加するため、要素にはmousewheel、'click'、'mouseover'、'mouseout' などと同じ方法で、ハンドラーをアタッチ/名前空間/トリガーなどを持つことができます。

于 2013-01-09T22:19:43.670 に答える
1

なぜ彼は el という名前のパラメーターを持っているのですか? また、そのパラメーターはどこで初期化されるのでしょうか?

elはパラメーターなので、初期化する必要はありません。プラグインの使用時に渡されます。たとえば、DOM にアタッチされていない空の div で$.yourpluginname($("<div />")[0])プラグインを初期化します。el

彼が DOM オブジェクトへの逆参照を追加しているのはなぜですか?

逆参照は、現在のインスタンスを要素に保存するだけなので、その要素を使用したプラグインへの将来の呼び出しは、新しいインスタンスを作成するのではなく、既存のインスタンスを参照できます。

なぜ彼はvar methods = {//...}、jQuery のドキュメントで想定されているシステムを使用しないのでしょうか?

サードパーティの開発者として、私たちが望む構造を使用してプラグインを自由に開発できるからです。

また、なぜ彼は jquery 公式のパターンを使用しないのですか?

前の回答を参照

彼、つまり彼の mousewheel() メソッドがプラグインの名前空間にバインドされていないのはなぜですか?

悪い習慣かもしれませんが、最終的にはプラグイン開発者が必要かどうかを決定します。

それはすべて悪い習慣ですか、それともより良い方法ですか?

どちらも、私たち開発者が、好きな構造を使用して jQuery プラグインを開発できるという事実の証明にすぎません。

jQuery UI ウィジェット システムの下で開発するか、簡単に拡張/変更できる構造を使用して、plugin.js の n 個の異なるバージョンにならないようにすることを好みます。(jquery ドキュメントの内容の修正版)

于 2013-01-09T22:11:57.510 に答える
0

私はこれを出発点として本当に提案します。

于 2013-01-09T21:51:39.740 に答える