1

我刚刚被 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次。我认为这是我缺少的某种清理,但我不知道是什么。

4

2 回答 2

3

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

于 2013-03-10T23:42:23.707 回答
1

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

于 2014-04-03T15:30:52.190 回答