Backbone.js - Координационная структура (реализация), Состояние и История - PullRequest
1 голос
/ 19 октября 2011

Я ищу простой и расширяемый способ сериализации полного состояния моего приложения 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 правильно отражаются в виджетах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...