События Backbone запускаются дважды

Почему я должен создавать целый близкий прототиптолько для того, чтобы мои события не были привязаны к моему представлению? Разве Backbone не должен просто встроить это? Есть ли способ определить, когда представление удаляется?

Мои магистральные события срабатывают дважды после того, как я ухожу и возвращаюсь к представлению.

        events : {
            "click #userDropdownButton > a" : "toggleUserDropdownMenu",
            "click" : "hideUserDropdownMenuIfClickedOutside"
        },

        el : "body",

        initialize : function() {
            this.render();
        },

        // Shows/hides the user dropdown menu
        toggleUserDropdownMenu : function() {
            if(!this.$el.find('#userDropdownButton > ul').is(':visible')) {
                this.showUserDropdownMenu();
            } else {
                this.hideUserDropdownMenu();
            }
            return false;
        },
        showUserDropdownMenu : function() {
            this.$el.find('#userDropdownButton').addClass('hover');
            this.$el.find('#userDropdownButton > ul').show();
            this.$el.find('#userDropdownButton > a .arrow-down').removeClass('arrow-down').addClass('arrow-up');
        },
        hideUserDropdownMenuIfClickedOutside : function() {
            if(this.$el.find('#userDropdownButton > ul').is(':visible')) {
                this.hideUserDropdownMenu();
            }
        },
        hideUserDropdownMenu : function() {
            this.$el.find('#userDropdownButton').removeClass('hover');
            this.$el.find('#userDropdownButton > ul').hide();
            this.$el.find('#userDropdownButton > a .arrow-up').removeClass('arrow-up').addClass('arrow-down');
        },

При первом рендеринге представления раскрывающийся список открывается и закрывается правильно, но при втором рендеринге представления раскрывающийся список интерпретирует каждый щелчок дважды, поэтому, как только он открывается, второй щелчок закрывает его.

12
задан laser 20 June 2017 в 09:50
поделиться