2009-04-16 10 views
13

誰かが既存のjQueryプラグインを拡張しましたか?jQueryプラグインを拡張する

どこから始めたらよいかわかりません。私はむしろ、私が拡張したいプラグインを実際にコピーしたり修正したりすることはしません。 問題のプラグインでプロトタイプを呼び出したり、単に呼び出しを行ったりしていますか?

これを行うには意味があると思っていますか?

答えて

10

EDIT:セブで指摘したように、これは厳密にプラグインを「拡張」の例ではない、より多くのプラグインを「カプセル化」は、それが:)

が来るとしてそれを取るここで私は簡単にするためにやった何かしばらく前jquery autocomplete pluginの私の使用:

// small autocomplete plugin wrapping the full autocomplete plugin for a standard look and feel 
(function($) { 
    $.fn.standardAutocomplete = function(type) { 
     return this.autocomplete(ToAbsoluteUrl("~/System/Autocomplete/" + type), { 
      formatItem: formatItem, 
      formatResult: formatResult 
     }); 
     // Autocomplete formatting callbacks 
     function formatItem(row) { return row[0] + "<span class=\"sub\">" + row[1] + "</span>"; } 
     function formatResult(row) { return row[0].replace(/(<.+?>)/gi, ''); } 
    } 
})(jQuery); 

今ではjqueryのコーディングプラクティス「の本で」次はない - 例えば私は、複数の要素が選択されている可能性があるという事実は考慮していませんが、この場合は、ページで複数の要素を決して選択しないことを知っていますので、単純にしたい、私 "。おそらくもう少し洗練された同様のアプローチを使用することができます。

+0

実際、私はその方法を検討していました。コピーして貼り付けるよりも汚れが少ないと感じました。あなたが答えとしてあなたの印を付ける前に、私が「書籍」の答えをしばらく外に放っておけば、あなたは私を許しますか? :) –

+0

もちろん、問題ありません:) –

+6

これはラッパーですが、クラスもオブジェクトも拡張していません。あなたは実際に他のプラグインを作成していますが、他のプラグインのメソッドやオプションはありません。その場合は何も拡張しています。 – Seb

2

プラグインが正常に実行されている場合は、その動作を変更するためにoptionsを使用する以外に、多くの選択肢がありません。

これの目的は、すべてのコードがカプセル化され、他のコードと干渉しないため、コードを挿入することができないことです。

実際にその動作を変更する必要がある場合は、&をコピーしてコードを貼り付ける必要があります。

+1

典型的な継承では、コードを挿入するのではなく、オブジェクトを拡張して新しいものを作成します。この場合、通常の継承を使用できませんか?私は既存のメソッドを変更するのではなく、メソッドなどを追加することを検討しています。 –

+0

私の意見を知るためにスティーブの答えで私のコメントを参照してください。要するに、私はあなたが拡張することはできないだろうと思うが、あなたが尋ねたものとはまったく異なる何かである_WRAP_。 – Seb

+0

私はそれがラッパーであることを理解しています。それが真の継承と比較したときの私の* 2番目の選択であった理由です。 –

関連する問題