2013-03-11 132 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