2011-04-23 6 views
13

$.fn.myFunctionコンストラクタを使用してカスタムjQueryプラグインを作成し、JavaScriptのカスタム関数を$('selector').myFunction()として呼び出すことができます。セレクタなしのカスタムjQuery関数の作成

しかし、私が現在取り組んでいるプロジェクトでは、セレクタが動作しないような関数を定義する必要があります。これは実際にはMessageBoxプラグインのためのものです。 C#のMessageBoxクラス。次のようにそのように、私は、理想的にはMessageBoxとしての機能を作成し、それを呼び出すしたいと思います:

var myMessage = $.MessageBox();をして、ターンmyMessage.Show();

お知らせの先頭にjQueryのリファレンスのセレクタbraketsの欠如で関数呼び出し。

これに関するベストプラクティスについてのアドバイスは、感謝して受け取ります。

答えて

14

これは動作するはずです:

jQuery.MessageBox = function() { 
    var show = function() { 
    // something... 
    } 
    var hide = function() { 
    // something... 
    } 
    return { 
    show: show, 
    hide: hide 
    } 
} 
+1

はこの良い習慣ですか? – relipse

+0

@relipse:疑問がある理由を明確にすることはできますか? – Amadan

+3

jqueryのネームスペースを混乱させるのが良い方法か、別の方法があるのだろうかと思います。その間、私は上記のあなたのコードに似たセレクタを使わない独自のdialogBoxを実装しました。 https://github.com/relipse/jquery-dialogPrompt私はYAHOO!を知っています!ライブラリには独自のYAHOO.namespace()関数があります。 – relipse

5

relipseは良い点を持っている - あなたがメインの名前空間を乱雑にしているよう。たとえば、より多くのオブジェクトがある場合の解決策。メッセージボックスは、次のように独自の名前空間を作成することです:

あなただけ(この場合 myLibには、あなたのライブラリーの名前)、メインの名前空間内の1つの場所を取っている意味
jQuery.myLib = { 
    MessageBox: function() { 
    var show = function() { 
     // something... 
    } 
    var hide = function() { 
     // something... 
    } 
    return { 
     show: show, 
     hide: hide 
    } 
    } 
} 

。あなたはこのようにそれを呼びたい:

jQuery.myLib.MessageBox.show() 
1
(function ($) { 
    $.MessageBox = function() { 
     var show = function() { 
      // something... 
     } 
     var hide = function() { 
      // something... 
     } 
     return { 
      show: show, 
      hide: hide 
     } 
    } 
})(Jquery); 

私はあなたが即時の呼び出し機能に優れたスコープの名前空間との衝突を避けるためだと思います。

関連する問題