2012-01-19 6 views
0

私のクラスは以下のように定義されます。なぜ私のイベントをバックボーンにしていませんか?

class NewUser extends Backbone.View 
    template : JST["backbone/templates/events/new"] 
    events : 
    'click button' : 'hello' 
    hello : -> 
    alert('hi') 
    render : -> 
    @el = $(@template()) 
    @ 

次のように私はページを初期化します。

$('body').append(new NewUser().render().el) 

しかし、私はボタン、無警告を表示]をクリックします。誰かが自分のコードに何か間違っているのを見ますか?ビューは表示されますが、イベントは決して登録されません。

答えて

1

あなたのrender方法であなたの@elを作成している:

render : -> 
    @el = $(@template()) 
    @ 

いますが、delegateEventsを呼び出すために無視:

は、ビュー内のDOMイベントの宣言型のコールバックを提供するために、jQueryのdelegate機能を使用します。 [...]デフォルトでは、delegateEvents

だから、あなたのイベントは、DOMに追加し、ボタンが有用何もしない@elにバインドされることはありません飽きない[...]あなたのためのビューのコンストラクタ内で呼び出されます。あなたのrenderは次のようになります。

render : -> 
    @el = $(@template()) 
    @delegateEvents() 
    @ 
+1

delegateEvents取得をバインドする必要があります、それはjQueryのデリゲートメソッドを使用しているので、それを再度コールする必要がありません。 – Paul

+0

@Paul:しかし、彼は初期化の後に '@ el'を置き換えているので、既存のデリゲートがいなくなったら、これで遊んでください:http://jsfiddle.net/ambiguous/SA6RB/ –

+0

良いキャッチ@mu! – Paul

0

をビューのelにレンダリングされたテンプレートのボタン部分ですか?

そうでなければ、イベントハッシュはビュー自体のイベントに限定されているため、helloイベントは発生しません。手動で、その場合にはrender方法でイベントにビューの初期化時に呼び出される

render : -> 
    @el = $(@template()); 
    $('#buttonId').click(@hello); 
関連する問題