2011-12-09 10 views
1

他の多くのユーザーと同じように、私は 'el'とイベントに問題があります。私の状況では、デフォルトのel(ちょうど '')設定tagNameを使用し、jQueryセレクタを使用してセレクタにelを設定し、DOMを準備するための準備を含む複数のソリューションをテストしました。これらのソリューションのそれぞれは、イベントをバインドする際に失敗しましたが、デフォルトのelとtagNameを除いて、すべてhtmlの生成に失敗しました。 関連するコード ビュー(別のビューから抽出された)ビューバックボーン動的に作成された 'el'バインドされていないイベント

view = new Aggregator.Views.Streams.StreamView({model: stream}) 
    console.log view.el 
    $(@el).append view.render().el 

を呼び出し

$ -> 
    class Aggregator.Views.Streams.StreamView extends Backbone.View 
     template:JST["backbone/templates/stream"] 
     el: $('.item') 
     events: 
     "click div" : "testing" 
     initialize: (model)-> 
     console.log @el 
     _.bindAll this , 'render' 
     @model.bind 'change', @render 
     @model.view = @ 
     @render() 
     @delegateEvents() 
     render: -> 
     $(@el).html "test" 
     console.log @el 
     @ 
     testing: -> 
     alert "EVENT" 
     #@model.clear() 

機能は、私は少し困惑している、私はエルを設定しているが、それは作成されませんいずれか、またはそれはdoesnのイベントをバインドしません。 DOMをロードして、コンストラクタにelを渡すのを待ってみましたが、成功しませんでした。私の最も可能性の高い明白な間違いの助けをいただければ幸いです。

答えて

6

私はあなたのイベントのハッシュ

events: { 
    "click div" : "testing" 
} 

を認識だと思うけれども、私は、CoffeeScriptのに慣れていないと私はあなたの一般的なビュー要素をクリックして、このテスト機能をバインドしようとしている賭け申し訳ありませんか? 問題があります。

は、あなたのクリックイベントが実際に何をするか(セレクタワイズ)は、次のとおりです。

$('div', viewElement).click(fn); 

意味、あなたはあなたのビュー要素INSIDE viewElement divのが、のdivのを対象としません。

あなたが一般的な見解要素自体にバインドしたい場合は、 は、あなたのケースでは、セレクタ

せずにイベントを定義します。

events: { 
    "click" : "testing" 
} 
+0

動作します!私は、 "クリック"はビュー要素ではなくドキュメントに関連していると仮定していました。説明ありがとう。 –

+1

その前提が間違っていると、イベントのハッシュは常にビューの要素内でスコープされ、何もせずにクリックするとEL自体にバインドされ、背後にあるものをクリックするとEL内を検索します。 – Sander

関連する問題