Используйте маршрутизатор.
Создайте класс View для чата. Каждый чат получит свое представление и собственные вкладки. При обновлении функция render() для представления обновляет чат, даже если он не виден пользователю.
Код, который я использую для управления вкладками, выглядит так:
hide: ->
if @el.is(":visible") == false
return null
$('#' + @id + '-tab').removeClass('activetab').addClass('inactiveTab')
$.Deferred((dfd) =>
@el.fadeOut('fast', dfd.resolve)
).promise()
show: ->
if (@el.is(':visible'))
return
$('#' + @id + '-tab').removeClass('inactiveTab').addClass('activetab')
$.Deferred((dfd) =>
@el.fadeIn('fast', dfd.resolve)
).promise()
Это то, что входит в представление. Каждое представление получает слагифицированное имя. Обратите внимание на использование библиотеки jQuery "Deferred". Я обсужу это позже.
В маршрутизаторе определите маршрут для чатов:
'chat/:chatid': 'switchOrStartChat'
И методы:
fadeAllViews: () ->
_.select(_.map(@views, (v) -> v.hide()), (t) -> t != null)
switchOrStartChat: (chatid) ->
chat = @views[chatid] ||= new ChatView({chatid: chatid})
$.when.apply(null, this.fadeAllViews()).then(() -> view.show())
Конечно, вы можете обобщить это дальше, но идея состоит в том, что всякий раз, когда вы переключаете вкладки, вы просто переключаете метод, чтобы скрыть все, что видно, а затем (отложенный гарантирует, что это происходит в правильном порядке) показываете одну вещь, которая не видна. . Вкладки поддерживаются каждым представлением; вам придется немного повозиться, поскольку они, вероятно, будут находиться за пределами фактического DIV, поддерживаемого представлением, но это довольно просто. Вам придется написать отдельный шаблон для ваших объектов вкладок, чтобы создать объекты DOM вкладок с идентификаторами, которые содержат ваш chatid
slug, но это легко управляемо.
Я написал руководство по такому одностраничному дизайну: The Backbone Store (ссылка ведет на версию Javascript, хотя в последнее время я являюсь сторонником coffeescript), где я также обсуждаю использование этой техники для поиска и изменения вспомогательных средств навигации на основе слагов, таких как вкладки, хлебные крошки , и тому подобное.
person
Elf Sternberg
schedule
26.09.2011