backbone.js – 如何使用Marionette JS维护视图状态?

似乎Marionette不是为处理重用视图而设计的.什么是维护视图状态(对于所有视图类型)的有效方法,因为它们总是被重建?

我的第一个想法是在模型中捕获状态,但我很快就分开了这个想法,因为许多视图可以引用相同的模型.

我确实试过以几种不同的方式重复使用观点,但不确定我在做什么是正确的.在每种情况下,我觉得我压倒的木偶方法可能会破坏事物(现在和/或以后).

我已经找到了关于如何用纯Backbone实现这一目标的建议,并且还看了一眼Giraffe,它似乎非常有效地处理状态,但我还没有为Marionette找到解决方案.

最佳答案 用于将数据获取到模板的简单未保存状态系统是:

View.MyView = Marionette.ItemView.extend({
    serializeData: function() {
        return _.merge(this.model.toJSON(), this.options.state.toJSON());
    },
});

var view = new View.MyView({
    model: model,
    state: new Backbone.Model(),
});

使用更高级的版本,您也可以使用模型事件:

View.MyView = Marionette.ItemView.extend({
    initialize: function() {
        var self = this;

        this.options.state.on('change', function(event, data) {
            if (_.isFunction(self[event])) {
                self[event](data);
            }
        });
    },
});

然后在你的控制器中:

view.options.state.trigger('change', 'functionName', 'someData');
点赞