[英]Backbone.View event only fires once
jumpToWave事件只被触发一次,我不明白为什么。
这是我的看法:
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”不再被记录之后,该事件仅针对每个模态触发一次。
我没有在WaveModalView
上看到你的代码调用render
,但我怀疑问题是你从其他地方调用render()
,而这反过来调用$(this.el).html(...)
,它取代了视图元素的内容,新插入的内容没有绑定到其元素的事件。
如果这确实是问题,你可以通过在render()
函数的末尾添加this.delegateEvents()
来解决它。
例如,检查这个问题和答案: 为什么在Backbone.js中第二次渲染后事件没有触发?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.