2015-01-05 3 views
1

Я новичок в магистрали и им было поручено расширять и поддерживать базовое приложение.backbone.js общее событие, запускаемое для каждого вида

У меня возникла проблема с нажатием кнопки «выход из системы» для каждого загруженного представления. Я создал базовый класс для общих просмотра событий:

BaseView = Backbone.View.extend({ 
    logout: function() { 
     console.log('logout'); 
    }, 
    events: { 
     'click .logout':'logout' 
    } 
}) 

Я тогда унаследовать это в соответствующих взглядах

DashboardView = BaseView.extend({ 
    el : '#app', 
    render: function(){ 
     this.$el.html(_.template($('#Dashboard').html())); 
     return this; 
    } 
}) 

шаблоны, которые используются имеют кнопки в <div class="logout"></div>

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

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

Во-первых, это проблема, которую я должен решить? Если да, то как мне это сделать?

Приветствия

+3

Как вы устанавливаете 'el' protperty представления? – rednaw

+0

Или, в общем, как вы визуализируете эти 4 представления? Можете ли вы опубликовать методы 'render()'? – AlexZ

+0

Я обновил пример, чтобы включить 'el' и функцию рендеринга, функции рендеринга одинаковы, но загружают другой шаблон. Cheers – hondac90

ответ

0

Думаю, я нашел решение.

в функциях событий я теперь призывающих this.undelegateEvents(); например:

showview : function() { 
    this.undelegateEvents(); 
    app.appRouter.navigate("/dashboard", true); 
} 

и в app.js в функции appRouter я называю this.DashboardView.delegateEvents(); так:

app.appRouter.on('route:dashboard', function(){ 
    app.dashboard = new DashboardView(); 
    app.dashboard.render(); 
    app.dashboard.delegateEvents(); 
)} 

Я бы интерес к знать, есть ли проблемы с этим решением.

С уважением

+0

im, чтобы опубликовать ответ, хорошо, что вы узнали :) правильно, до маршрута, undelegate событий. Кстати, вам не нужно называть 'delegateEvents', поскольку он уже вызывается во время инициализации – ChinKang

0

Backbone использует JQuery-х on для регистрации событий DOM.
Когда вы создаете четыре представления, 4 прослушивателя событий будут привязаны к одному и тому же элементу, если все они имеют один и тот же родительский элемент.

Лично я стараюсь создать перенаправление, используя window.location.href, если я сейчас на странице, требующей аутентификации. Если я на странице, для которой не требуется аутентификация, я просто перерисовываю заголовок, заменяя имя пользователя кнопкой входа (/ register).

Смежные вопросы