2012-04-04 9 views
2
var Modal = function (content, options) { 
    this.options = options 
    this.$element = $(content) 
    .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) 
              ^^^^^^^^^^^^^^^^^^^^ 
             What does this mean? 
} 

私はかなり新鮮です。私はこの種の構文を以前は見たことがありません。私の推測は、 '却下'を含む任意の属性のクリックイベントであり、 'モーダル'の値を持つ???ブートストラップモーダルデリゲートイベントタイプの構文

答えて

5

あなたが見ているのはNamespaced Eventsです。これは、同じイベントに対して複数のイベントハンドラがある場合に広く使用されます。それだけでunbind示すが、それはまた$('#test').trigger('click.a')のように特定のハンドラをトリガするために使用することができ、上記の例では、以下の例

DEMO

$('#test').on('click.a', function() { 
    alert('A is clicked'); 
}); 

$('#test').on('click.b', function() { 
    alert('B is clicked'); 
}); 

$('#unbindA').on('click', function() { 
    $('#test').off('click.a'); 
}); 

を参照してください。

両方のハンドラに「クリック」するだけでは上記のことはできません。ベガの答えに追加するには

jQuery docs on Namespaced Events

+0

jsfiddleへのリンクのための+1 – Kelvin

+0

'.on( 'click.a''の' .a'部分はあなたが作ることができる名前です** ** **は参照していませんフレームワーク内の何かが、あなたのハンドラに一意に名前を付けて後でトリガ/オフ/などで参照できるようにする方法でしょうか? – AaronLS

+0

@AaronLSはい、正しいです。http://api.jqueryについて読むことができます.com/on /#event-names –

0

dismissまたはmodal名前空間があるときにイベントclick.dismiss.modalon()(jQueryの1.7以降で利用可能)またはdelegate()を呼び出す

が発射され、クリックハンドラを登録することを意味しますトリガーされたイベントで渡された場合、またはclickが名前空間なしで呼び出された場合

modalは(構文は誤解を招く可能性がある)dismiss下で「ネスト」されていないが、それらはclickに「添付」として直接処理されます。つまり、click.dismiss.modalclick.modal.dismissに相当します。

例:trigger()unbind()、およびoff()は一つだけの名前空間を受け入れることを

$('#elem').on('click.dismiss.modal', function() {}); 
$('#elem').trigger('click.dismiss'); // handler is called 
$('#elem').trigger('click.modal'); // handler is called 
$('#elem').trigger('click'); // handler is called 
$('#elem').trigger('click.abc'); // handler is NOT called 

注意。

$('#elem').off('click.dismiss'); // now the handler is just 'click.modal' 

また、その名前空間(だけでなく、click)ですべてのイベントを削除しますどの.dismissを使用してバインド解除することができます。トリガリングは、単独で名前空間では機能しません。ドットの前にイベント名がなければなりません。