магистраль много событий, запущенных на том же представлении нагрузки - PullRequest
0 голосов
/ 14 марта 2012

Я использую в приложении backbone, require.js и coffeescript. Программируя мое приложение, я обнаружил, что у меня проблема с представлениями. Извините за мой английский ! =) * * Тысяча одна

Мой дом:

<div id="header"></div>
<div id="container"></div>

Часть моего приложения:

class AppRouter extends Backbone.Router
     routes:
        '': 'home'
        'u/:user': 'user'
        'events: 'events'
        'messages': 'messages'

    events: () ->
        events = new EventsView
        events.events()
    messages: () ->
        messages = new MessagesView
        messages.messages()

class MessagesView extends Backbone.View 
    template: window.Handlebars.compile MessagesTpl
    el : '#container'
    events :
        'click #test' : 'test'

    test: () ->
         console.log 'test'

    messages: () ->
         #fecth and bind render method on 'all'

class EventsView extends Backbone.View
    template: window.Handlebars.compile EventsTpl
    el : '#container'

    events: () ->
         #fetch and bind render method on 'all'

У меня следующая проблема:

Когда я создаю экземпляр и вызываю в маршрутизаторе («сообщения») messagesView, я делаю выборку, и рендер работает нормально. Затем, когда маршрутизатор переходит к другому маршруту («события») и вызывает eventsView, происходит то же самое, он правильно отображает представление.

Но при повторной навигации по маршруту «сообщения» событие «тест» запускается два раза! , один раз для каждого экземпляра!

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

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

Большое спасибо за все! Grettings из Аргентины!

Alejandro

1 Ответ

1 голос
/ 14 марта 2012

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

В качестве альтернативы, вы можете иметь отдельные элементы dom для MessagesView и EventsView, создавать представления при первом переходе пользователя на маршрут. Затем вы всегда скрываете и показываете элементы dom в зависимости от текущего маршрута.

...