2012-02-12 3 views
24

Я принял решение изменить мою маршрутизацию приложений на стороне клиента, а не на стороне сервера. Это означает, что мне понадобится способ переключения представлений на странице и из нее, когда пользователь перемещается по сайту. Единственное, что я мог найти, это попытка документировать это: How to switch views using Backbone.jsПереключение представлений в основу для навигации между страницами - что правильно?

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

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

ответ

37

Я написал несколько статей на эту тему:

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

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

http://lostechies.com/derickbailey/2011/12/12/composite-js-apps-regions-and-region-managers/

ре Использование взглядов на самом деле является анти-шаблоном в большинстве случаев. обычно имеется много дополнительного кода и лишнего крути, которые участвуют в просмотре экземпляров, чтобы заставить их повторно подключаться к DOM и правильно обрабатывать зарегистрированные DOM-события. Кроме того, вы рискуете потерять память (о чем говорит моя первая статья) и разрушают производительность вашего приложения, используя слишком много памяти.

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

+1

Во-первых, отлично читайте, ваш блог попал прямо в мой RSS-канал. Я сейчас перейду к Марионетте. Каково ваше мнение о требовании libs like requireJS и их использовании с этим? Я думаю, что полезность истекает, как только маршрутизация клиентской стороны реализована ... –

+1

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

+0

Не забудьте добавить 'this.delegateEvents()' внутри метода View # render(), иначе что-то вроде 'events: {" click .button ":" doStuff "}' не будет запускаться после просмотра -rendered. – James