LINUX.ORG.RU

Два роутера - проблема с обновлением страницы

 backbone.js


0

1

Добра.
Итак, имеется страница map.html
У неё в заголовке есть навигация (Header) и блок с вкладками (Block), для которых написаны роутеры:

block.render()

var HeaderRouter = Backbone.View.extend({
 routes: {
  "!/map": "map"
 },
 
 map: function() {
  alert('map')
 }
})

var BlockRouter = Backbone.View.extend({
 routes: {
  "!/stat": "stat"
 },
 
 stat: function() {
  alert('stat')
 }
})

var headerRouter = new HeaderRouter()
var blockRouter = new BlockRouter()
Так вот, если проследовать последовательно сначала по ссылке map, а затем stat, то все алерты выводятся, как и положено.
Однако при этом адрес страницы преобразуется в '.../map.html#!/stat', т.е. сам #!/map поглощается и при обновлении страницы ничего не происходит.
ЧЯДНТ? В backbone новенький, так что мог запутаться со вложенным роутиногом.

Благодарю за внимание.


похоже ты вообще не понимаешь что делаешь. роутинг у тебя не вложенный, что два роутера с таким набором правил что один сути не меняет, все должно работать, map.html#!/foo корректная ссылка в данном случае, что ты там от вьюхи расширяешь вообще не ясно. выложи пример на fiddle какой-нибудь, пока это прсто бред

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Действительно, пока бред.
Здесь я выложил примерно то, что имел в виду.
Суть вопроса прежняя - какм образом можно из одного роутера (headerRouter) в другой (blockRouter) передать маршрут и сохранить состояние после обновления страницы или добавления в закладки? Т.е. чтобы, например, alert #!/map/base срабатывал в том числе после обновления страницы.
В документации есть краткое упоминание о подобного рода маршрутах. Применительно к моему примеру маршрут '!/map' должен в таком случае выглядеть как '!/map/:section', однако я не понимаю, как при этом оформлять ссылки в block и каким образом задать маршруты в blockRouter.

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

ffomg
() автор топика
Ответ на: комментарий от ffomg

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

когда ты создаешь много маленьких роутеров вместо одного большого это как бы декомпозиция, тебе не надо создавать второй из первого, это работает не так, делай

var headerRouter = new HeaderRouter()
var blockRouter = new BlockRouter()

далее можешь посмотреть на следующие ступени развития бекбона, разные библиотечки типа chaplin | marionette, либо развивай каркас сам, как я уже писал

перечитал еще раз твой пост. наверное тебе удобнее будет делать один роутер и все, если стоит задача «передать» чето, зачем их вообще дробить? сохраняй это в this из роутов, дублируй в localStorage например, восстанавливай после перезагрузки или храни все состояние в параметрах урл (в жсон объекте, например), я бы так и сделал

trashymichael ★★★
()
Последнее исправление: trashymichael (всего исправлений: 2)
Ответ на: комментарий от trashymichael

Спасибо за разъяснения!
В итоге я просто «переразбил» роутеры - теперь один отвечает за "!/map/:section", а второй за "!/about/:section". С таким вариантом всё работает именно так, как и задумано. Благодарю!

ffomg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.