У меня это довольно простое controller
+ router
ниже, например, цели. Мой вопрос: как мне работать с маршрутизатором и Backbone.history
, если я изменил определенную модель?Как работать с модифицированными моделями при использовании Backbone.history
Предположим, что я запустил route
r и controller
. По умолчанию маршрут ""
приводит меня к функции blue
, где я устанавливаю фон в синий цвет. Я могу нажать на кнопку, которая приведет меня к функции red
, где она устанавливает красный фон и URL-адрес /#red
.
Если я нажму кнопку «Назад», я вернусь к своему ""
url, но фон останется красным. Есть ли способ получить предыдущее состояние и не только изменить URL-адрес при работе с историей?
Я понимаю, что в функции blue
, я мог бы просто установить фон, чтобы быть синим, а не this.model.get("background)
, но я прошу в более сложных случаях, как получить предыдущее состояние this.model
через Backbone.history
.
MyApp.module('Main', function (Main, MyApp, Backbone, Marionette, $, _){
Main.Router = Marionette.AppRouter.extend({
appRoutes: {
"": "blue",
"red": "red"
}
});
Main.Controller = Marionette.Controller.extend({
start: function() {
console.log("MyApp Controller start...");
this.model = new Backbone.Model({background: "blue"});
Backbone.history.start()
},
blue: function() {
$("body").css("background-color", this.model.get("background"));
$("#button").click(function() {
//MyApp.router.navigate("red", {trigger: true});
MyApp.controller.red();
});
},
red: function() {
this.model.set({background: "red"});
$("body").css("background-color", this.model.get("background"));
MyApp.router.navigate("red");
}
});
});
Вы можете попробовать [previousAttributes] (http://backbonejs.org/#Model-previousAttributes), но это звучит так, как будто у вас есть недостаток дизайна для начала. Если вам нужны полностью обновленные атрибуты модели, вам может понадобиться создать для них свою собственную структуру данных, а модель сохранит текущее состояние, а не всю историю. – ivarni
Скорее всего, я не полностью понимаю MVC. Как бы вы справились с этой ситуацией: 1. маршрутизатор вызывает метод контроллера, который показывает представление из модели 2. пользователь удаляет модель кликом, и он меняет URL-адрес. 3. пользователь хочет вернуться назад и увидеть модель, которую он просто удалил. –
У меня есть ответ здесь - http://stackoverflow.com/a/33327942/132829 = - это может быть полезно для вас. Там очень похож набор с Marionette Router и Controller, который обрабатывает открытие любого маршрута напрямую, а кнопки назад/вперед тоже работают. – Yura