2010-11-22 9 views
4

テイクフォームのプラグインは:プラグインの外からjQueryプラグインの関数にアクセスするには?例えば

jQuery.autocomplete = function(input, options) { 
    function abc(){} 
    function def(){} 
} 

の機能が正常に動作し、予想通り。しかし、私は関数abc()を呼び出せるようにしたい。 $(document).ready(function(){})から取得します。ステートメント。以下はうまくいかず、私は実際にアドバイスをしたいです。

$(document).ready(function() { 
    jQuery.autocomplete.abc(); 
    abc(); 
    $(this)->abc(); 
} 
+0

は、これはいくつかのプラグインあなたが書いているか、あなたが誰かの内部機能にアクセスしようとしているということです他のプラグインですか? –

答えて

0

[OK]を入力すると、jQueryプラグインがdivをタグクラウドに追加しました。これらの「タグ」の1つをクリックすると、それが第2のリストに追加されました。セカンダリリストをクリックすると、セカンダリリストから項目が削除されました。私は、ボックスに入力されたテキストと一致する場合にのみ、このクリックをプライマリリストに追加するようにしました。このため、私はオートコンプリートコードを再度実行したかったのです。この問題を回避するために、私は私のプライベートコードに "keydown"ではなく "click"イベントで二次関数を追加しました。これにより、セカンダリリストのdivにトリガー(「クリック」)を追加することができました。これにより、オートコンプリートアクションが再びトリガーされました。問題が解決しました。私はあなたの助けを借りる人がいなくてもこれを理解できなかった。ありがとうございました!

0

あなたのオートコンプリート機能は、明示的に、おそらくいくつかのグローバルオブジェクトにそれらへの参照を置くことによって、何らかの形でこれらの機能を利用できるようにする必要があります。さもなければ、彼らは完全に外界から隠され、彼らはアクセスすることができません。

+0

まあ、「完全に」ではありません。常に「機能」があります。toString() '関数から内部関数を強制的に抽出するためにハックします... –

+0

はい、しかし、できることは、**新しい**関数を作成することです。あなたはまだそれらの機能、とくに閉鎖の何かに実際にはいません。 – Pointy

+0

ええ、私は本当に機能を作り直すその道を踏み出すことを望んでいませんでした。テキストボックスでkeydownイベントを呼び出すことができれば、私のシステムが動作するかもしれません。これは可能でしょうか? – stevenmc

0

jQueryのプライベート関数(質問で説明したものなど)は、一般的にインスタンスに関連付けられています。関数内では、ローカルスコープ変数、またはキーワードを使用してインスタンスと対話します。だから、私はそれらをオンロードから呼び出すことが理にかなっているのか見ていない。プラグインが正しく開発されていれば、著者は必要に応じてコールバックを実装します。コールバックはインスタンスを介して割り当てられますが、グローバルには割り当てられません。

あなたはこのプラグインを書いて、構文は次のようなものになります。この動作を必要している場合:これらの機能は、グローバルにアクセストラフ$.autocompleteだろう

jQuery.autocomplete = function(input, options) {} 
jQuery.autocomplete.abc = function(){}; 
jQuery.autocomplete.def = function(){}; 

を。

+0

しかし、この例では、関数jQuery.autocomplete.abc = function(){}は、 jquery.autocomplete = function(input、options){}?私は$ .autocomplete.abc()を参照することができます。私の全体的な問題は解決しません。 – stevenmc

4

プラグインの初期化で、これはそこにある...

if(!data) { 
    /* Settings Extraction */ 
    $.extend(s, defaults, options); 
    /* Initialize Code */ 
    /* Data Storage */ 
    var YoPlugin = $('<div />', { 
     text : $this.attr('title') 
    }); 
    $(this).data('YoPlugin', { 
     target : $this, 
     myInternalFunction: myInternalFunction, 
     settings : $.extend({}, s), 
     YoPlugin : YoPlugin 
    }); 
    data = $this.data('YoPlugin'); 
} 

myInternalFunctionが実証されているようにあなたは内部機能を公開することができます。私は、外部プラグインの参照としてリンクを追加する 優れていると仮定言う$(「体」)に呼ばれるイベントからオブジェクトに取得 は「この」unusably体として、そう...

var multiSel = $('.YoPlugin'); 
var singleSel = multiSel[0]; //or other way to select the singleton or specific plugin enhanced target 
var pluginDataObj = $(singleSel).data('YoPlugin'); 
var func = pluginDataObj['myInternalFunction']; 
func(); 

葉つまり、初期化のように:スニペットのこのセットは、探求し、LIR BIRベタwhatzwhat理解を助けるためにR & Dの夜を公開とにかく $ .fn.YoPlugin.myInternalFunction

経由でプラグイン または同様の経路で宣言されています。

また、あなたは間違いなくあなたがこっちに吸収できることすべてを読む必要がある...

http://alexsexton.com/blog/2010/02/using-inheritance-patterns-to-organize-large-jquery-applications/

関連する問題