Подтвердить что ты не робот

Backbone.js: как перенаправить с одного вида на другой?

В Backbone.js, что эквивалентно HttpResponseRedirect в Django?

В одном Backbone.View мне нужно отправить данные на сервер, а затем перенаправить пользователя на другой вид. Как это работает? Должен ли я использовать событие или маршрутизатор?

Спасибо!

4b9b3361

Ответ 1

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

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

Router.navigate: эквивалент "перенаправления" (не является вентилятором этого)

После того, как ваш звонок на сервер вернется, вы можете вызвать свой метод маршрутизатора navigate: myRouter.navigate("/myRoute", true). Обязательно передайте аргумент true в качестве второго параметра. Или, как полагает JasonOffutt, просто вручную обновите фрагмент хэша URL-адреса, и это фактически то же самое.

Я не люблю этого, но некоторые люди.

Процедурный рабочий процесс

Вы можете создать очень простой объект, который знает, как поместить правильный вид на экран при вызове метода. Например, если вам нужно показать представление под названием "WidgetView", создайте объект с помощью метода showWidgetView. Сделайте объект с этим методом доступным в любом месте вашего кода, связав его с пространством имен, передав его в ваш текущий код или какой-либо другой метод. Когда ваш вызов на сервер вернется, вызовите метод showWidgetView и покажите ему следующее представление.

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

События и рабочий процесс

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

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

Эти объекты рабочего процесса, как правило, отвечают за запуск рабочего процесса за счет получения всех правильных представлений и моделей на месте, а затем содержат обработчики событий для ваших представлений и/или агрегаторов событий. Методы обработчика событий проверят состояние приложения либо через аргументы, проходящие через этот метод, либо просматривая какое-то другое состояние, и выясняют, что должно произойти дальше. Затем это приведет к тому, что приложение изменится на все, что ему нужно, на основе нового состояния.

Кроме того, объект рабочего процесса не является базовой конструкцией. Это то, что вы построите сами, просто используя простой старый JavaScript.

...

Надеюсь, что это поможет.

Ответ 2

Здесь подход, который я принимал:

Предполагая, что у вас есть маршрутизатор, определенный с помощью таких маршрутов:

var MyRouter = Backbone.Router.extend({
    routes: {
        'first-route': 'first',
        'second-route': 'second'
    },
    first: function() {
        // render first view
    },
    second: function() {
        // render second view
    }
    // ...
});

Обычно я просто использую теги и устанавливаю атрибут href для хэша, на который я хочу перенаправить:

<a href="#first">First</a>

В качестве альтернативы, если вы хотите "перенаправить" из своего JavaScript, вы можете явно указать хэш местоположения:

window.location.hash = 'first';

Я не уверен на 100%, что последний является "лучшей практикой", но я видел это в нескольких хороших учебниках.

//Правка

Итак, после повторного чтения вашего оригинального вопроса вы можете "перенаправить" после того, как вы перейдете с сервера, просто установив хэш местоположения.