Я ищу простой и расширяемый способ сериализации полного состояния моего приложения Backbone.js.
Допустим, я хочу сохранить полное состояние (некоторые модели виджетов + метаданные, такие как макет приложения и т. Д.) В моем «GlobalStateModel»:
var GlobalStateModel = Backbone.Model.extend({
defaults : {
layout : undefined,
widgetType1Collection : undefined, //Widget models
},
});
Я хочу сделать это, потому что тогда я могу легко установить соответствующие записи истории:
var HistoryController = Backbone.View.extend({
model : globalStateModel,
initialize: function () {
_.bindAll(this, "render", "updateHistory");
this.model.bind("change", this.updateHistory);
},
updateHistory : function () {
var globalStateModel = this.model.toJSON()
var state = jQuery.param.querystring("", state )
appRouter.navigate('v1' + state, false);
}
});
Но тут начинается сложная часть ... Я хочу иметь LayoutController или аналогичный, который создает экземпляры модулей виджетов, которые работают вместе с выше:
var LayoutController = Backbone.View.extend({
initialize: function () {
_.bindAll(this, "render");
this.model.bind("change:layout", this.render);
},
render : function () {
var layout = this.model.get("layout");
switch(layout){
case "layout-1":
this.renderLayout1();
break;
case "layout-2":
this.renderLayout2();
break;
}
},
renderLayout1 : function () {
var widgetModel1 = new WidgetModel()
var widgetController1 = new WidgetController({model : widgetModel1})
this.model.widgetType1Collection.add(widgetModel1);
//fetch the right widget model attributes from the global state?
widgetAttrs = { ..... }
widgetModel1.set(widgetAttrs)
},
});
Может быть, этот подход полностью ошибочен или, может быть, я просто скучаю по сантехнике, чтобы заставить это работать?
Как бы вы заставили LayoutController создать экземпляр 1 или нескольких виджетов и сделать их модели частью globalState?
Так что 1) при изменении их моделей / коллекции globalState правильно сериализуется и 2) что изменения / хэш-изменения globalState правильно отражаются в виджетах?