我刚刚用Backbone弄湿了,我觉得我有一个容易解决的问题。我有以下视图,这是一个简单的选项卡,当单击时打开一个面板,当关闭时返回到选项卡:
myApp.views.Support = {
Form: Backbone.View.extend({
initialize: function () {
this.el = $('#support');
this._ensureElement();
},
render: function () {
if (this.$el.hasClass('support-panel')) {
// close panel
this.$el.empty();
this.$el.removeClass('support-panel');
this.$el.addClass('support-button');
}
else {
// open and populate panel
var template = _.template(myApp.utils.RenderTemplate('support/default'), {});
this.$el.removeClass('support-button');
this.$el.addClass('support-panel');
this.$el.html(template);
}
return this;
},
closePanel: function () {
alert('close event fired');
},
events: {
'click #SubmitFormButton': 'submitForm',
'click #CloseSupportPanel': 'closePanel'
},
submitForm: function (event) {
alert('form submitted: ' + $('#message'));
}
})
}
一切正常,除了每次点击事件发生时“closePanel”被触发+2次。我认为这是某种清理方式,但我不知道是什么。
答案 0 :(得分:3)
可能是因为事件正在冒泡。尝试返回false
。
答案 1 :(得分:1)
我知道这是一个老问题,但它帮助我意识到我的问题是什么。如Daniel所说,返回false是有效的,但我问题的根本原因是我的标记中有两次jQuery选择器,导致创建了两个jQuery对象,因此click事件会触发两次。