2013-03-11 161 views
1

jumpToWave事件只會觸發一次,我不明白爲什麼。Backbone.View事件只會觸發一次

這是我的看法:

var WaveModalView = Backbone.View.extend({ 

template:_.template($('#tpl-wave-modal').html()), 

events: { 
    'hidden': 'remove', 
    'click .jumpToWaveBtn':'jumpToWave' 
}, 
    jumpToWave:function(e){ 
     e.preventDefault(); 
     console.log("JMP") 
     var marker = this.model.collection.markers[this.model.id]; 
     map.panTo(marker.getPosition()); 
     bounceMarker(marker,1750); 
    }, 
render:function() { 
    var model = this.model; 
    var that = this; 
    $(this.el).html(this.template(model.toJSON())); 

    if(model.get('waveReviews').length > 0){ 
     var reviewList = new WaveReviewList({model: model}); 
     $('#waveReviews' + model.id).html(reviewList.render().el); 
    } 

    this.$("#waveSync" + model.id).click(function(e){ 
     e.preventDefault(); 
     if(window.me){ 
      requestSyncWave(model.id,function(data){ 
       window.me.fetch(); 
      }); 
     } 
    }); 

    this.$("#waveEdit" + model.id).click(function(e){ 
     e.preventDefault(); 
     window.waveUnderEdit = model; 
     $(that.el).children(":first").modal('hide'); 
     openWaveEditModal(model); 

    }); 

    return this; 
} 

}); 

這是在模板中的相關按鈕:

<button class="btn btn-info jumpToWaveBtn" data-dismiss="modal" aria-hidden="true">Auf Karte 
      anzeigen</button> 

我有時間多模態我按一下按鈕。這個事件在每一個模式中被觸發一次,之後「JMP」不再被記錄。

回答

3

我沒有看到你的代碼在WaveModalView調用render,但我懷疑的問題是,你叫render()從別的地方,這反過來,調用$(this.el).html(...),它取代了視圖的元素的含量,並新插入的內容沒有綁定到其元素的事件。

如果確實存在這個問題,您可以在render()函數的末尾添加this.delegateEvents()來解決問題。

例如,檢查這個問題的答案:Why are events not firing after the second render in Backbone.js?

+0

是做到了,謝謝你。你可以詳細介紹一下delegateEvents嗎? – MJB 2013-03-11 13:43:57

+0

你是否檢查過'delegateEvents()'的官方文檔? http://backbonejs.org/#View-delegateEvents – 2013-03-11 17:14:09