骨干事件被多次调用

时间:2013-03-10 23:39:56

标签: backbone.js

我刚刚用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次。我认为这是某种清理方式,但我不知道是什么。

2 个答案:

答案 0 :(得分:3)

可能是因为事件正在冒泡。尝试返回false

答案 1 :(得分:1)

我知道这是一个老问题,但它帮助我意识到我的问题是什么。如Daniel所说,返回false是有效的,但我问题的根本原因是我的标记中有两次jQuery选择器,导致创建了两个jQuery对象,因此click事件会触发两次。