2016-07-25 10 views
0

私はしばらくの間jQueryを使用していますが、これは通常非常に単純なjQueryです。私はちょうど著者がPub Sub Patternと呼ばれる何かを使用するビデオチュートリアルを見ました。私は前にそれを聞いたことがないので、私は、説明のためにStackOverflowのとGoogleで検索しました:この例のjQuery&Pubサブパターンの理解

しかし、それはあることに特に理由コードで、まだ私にははっきりしていません上記のチュートリアルの著者が使用しています。だから、私はここに、このコードを貼り付けますし、あなたは私に説明を与えることができる場合:ここでは

1.pubsub.jsをという名前の最初の.jsファイルである、と私はそれを理解していない:

(function($) { 

     var o = $({}); // ??? what is this ??? 

     $.subscribe = function() { // ??? and this ??? 
      o.on.apply(o, arguments); // ??? o.on.apply(o, arguments) ??? 
     }; 

     $.unsubscribe = function() { // ??? and this ??? 
      o.off.apply(o, arguments); // ?? 
     }; 

     $.publish = function() { // ??? and this ??? 
      o.trigger.apply(o, arguments); // ?? o.trigger.apply(o, arguments); ?? 
     }; 

    }(jQuery)); 

私は、jQueryを使用して$(document).ready()または$(function()を使用できますが、私は今まで見たことがないことを知っています(function($) { ... }(jQuery)); - これは何を意味するのですか?また、私は、コードの残りの部分を理解していない...

2.次のファイルがapp.jsあり、それは含まれています

(function() { 
    $.subscribe('form.submitted', function() { 
     $('.flash').fadeIn(500).delay(1000).fadeOut(500); 
    }) 
}); 

これは実際に何をしますか?ここでも、(function() { ... });は何を意味するのですか?残りのコードについては、$.subscribe('form.submitted', function() {に説明してください。

$.publish('form.submitted', form); // publish? 

これも私には明らかではない。

3.最後に、我々はこのようなものを持っています。


私はこのすべてがjQueryを使ってPubSubのパターンの基本的な実装であることを理解し、誰かが(このパターンを使用して)、このようにするだろう、なぜ私はまだ得ることはありませんが、私はthat answer on Stackoverflowを読みましたが、それはですまだ私には不明です...私はこのコードを理解すれば、このパターンをいつ、どのように、いつ使うべきか、私には明らかになると思います。

+1

簡単な答えは、オブジェクトにバインドされたカスタムイベントのようです。関連項目[(function(){})()構造体とは何か](http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript) – charlietfl

答えて

1

(function($) { ... }(jQuery));の場合、作成者はjQueryインスタンスをパラメータとして渡しています。この関数の中では、$は渡されたjQueryインスタンスへの参照です。

「Pub Sub」は、イベント管理またはイベント処理の別の用語です。あなたが言っているのは、「これが起こったときには、する」ということだけです。

「購読」をすると、2つのパラメータ、リッスンしている「イベント」、イベントが「発生する」ときに実行するコードが渡されます。

「公開」すると、そのイベントを「開始」(またはトリガー)します。

onclickイベントのように考えてください。 onclickイベントで何かを設定すると、そのイベントを購読しています。クリックすると、そのイベントがパブリッシュされます。