2011-08-08 7 views
18

backbone.jsの動的生成ボタンでクリックイベントをバインドするにはどうすればよいですか? #display-nodesノードをクリックすると動的に生成されたバックボーンのボタンにイベントをバインドする方法はありますか?

window.PackageView = Backbone.View.extend({ 

    tagName: "div", 

    className: "package-template", 

    events:{ 
     'click #display-nodes' : 'main', // This button is declared in my HTML code and calls main method successfully. 
     'click .display'  : 'disp', // This is dynamic button generated with class as display 
    }, 

    getAction: function(nodeId){ // Get Actions from NodeId and generate buttons 
     $('.nodes').append("<button>" + action.Name + "</button>"); //Generate Buttons 
     $(".nodes button").addClass("display"); 
    }, 

    disp: function(){ 
     alert("Inside Disp Function"); 
    }, 

は、必要に応じて表示されますが.displayが動作していません。このボタンで関数を呼び出すにはどうすればよいですか?

+0

関連するマークアップも投稿できますか? – Mrchief

+0

'.nodes'は' package-template'のdivの下にネストされていますか?例: '

' –

+0

実際にネストされている場合は、' this。$('。nodes ')を使用すると、ボタンを追加する必要があります( '$('。nodes 'の代わりにappend) .append(... '。バックボーンビューで' this。$ 'はスコープ付きjQueryオブジェクトです –

答えて

33

動的に生成されたDOM要素がビューのelの子孫である限り、バックボーンビューは動的に生成されたDOM要素からイベントを受信できます(eventsプロパティを使用)。関連コードはdelegateEvents()です。それは、jQueryのdelegate()セレクタメソッドを使用します。

新しく作成された<button>がビューのelの子孫ではない可能性が最も高いです。私は正しい?

このような場合は、あなたは、ビューのelの外の要素を保持する場合は、あなたのビューのinit方法で別の要素の上にあなたのビューのevents財産とデリゲートから削除することができます。

+0

ありがとう – JABD

+0

@Eric - あなたの問題を解決し、それ以上の答えを待っていない場合は、受け入れられた答えとしてマークする必要があります。 – UpTheCreek

関連する問題