2011-11-21 7 views
10

私はその中にビューを持っているビューを持っています(実際には同じビュー、再帰的です)。私は 'a' onclickイベントからイベントを処理するために内部ビューのみを必要とします。私はセレクターの直接の子供だけを指定してこれをしようとしましたが、それは動作しません。Backbone.jsイベントハンドラでのみ子を指定する方法を教えてください。

 
events: { 
    'click >a': 'toggle' 
}, 

 
events: { 
    'click > a': 'toggle' 
}, 

を、彼らは、任意の提案をいけない仕事:

IVは試してみましたか? (注:ビューは再帰的であるため、タグとクラスを使用して同じようなことをやっては(

+0

によって停止されることはありません、あなたはあなたの完全なビューを表示し、どのようにあなたがそれをインスタンス化しているだろう?バックボーンでは、jQueryセレクタは自動的にビュー要素にスコープされ、理論上は機能します。親があまりにも –

答えて

9

私は同じ問題に遭遇してきた、とでのイベントの伝播を停止することによってそれを解決しました私の子ビュー。例えば...

events: { 
    'click a': 'toggle' 
}, 

toggle: function (e) { 

    // Stop event here. 
    e.stopImmediatePropagation(); 

    // Do more stuff... 

} 

これは、特定の子セレクタを指定する方法のあなたの質問に答えていないが、それは他のハンドラまで伝播するからイベントを保持します。あなたはあなたがその特定の要素をクリックすると、発火、他のイベントを持っていない場合は

0

あなたは私は意味...開始セレクタを指定する必要があります)内側と外側の両方が同じイベント定義を持っていることを意味仕事を文句を言いません必ずベースセレクタが想定されます。

events: { 
    'click #parent > a': 'toggle' 
} 

はこれを試していないが、それは動作するかもしれません。

+0

いや、私がこれはおそらくイベントの彼らの解析に関連していると想像します。 – chacham15

+0

知るには良いイベントを取得する – Seth

+0

ああ、イベントは子ビューで生成されるが、親に渡される可能性がありますか?これをどのようにフィルタリングするのですか? – chacham15

1

e.stopImmediatePropagation()は便利です。それ以外の場合は、e.currentTargetと選択したい要素を比較します。私。あなたがそのリンクがクリックされたときにもイベントを発射親ビューを持っている場合

events: { 
    'click a': 'toggle' 
} 

toggle: function(e) { 
    if (e.currentTarget == this.$el.find('a')[0]) { 
     ... 
    } 
} 

その方法は、それがe.stopImmediatePropagation();

関連する問題