你如何用Marionette JS维护视图状态?

时间:2014-08-06 20:21:58

标签: backbone.js marionette state backbone-views

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

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

我确实尝试过以几种不同的方式重复使用视图,但不确定我所做的是正确的。在每种情况下,我觉得我所覆盖的木偶方法可能会破坏事物(现在和/或以后)。

我已经找到了关于如何用纯Backbone实现这一目标的建议,并且还瞥了一眼看起来非常有效地处理状态的长颈鹿,但我还没有为Marionette找到解决方案。

2 个答案:

答案 0 :(得分:2)

用于将数据传输到模板的简单未保存状态系统是:

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');

答案 1 :(得分:0)

您可以使用ViewModel跟踪视图状态。

Sam在这里谈了一点:http://youtu.be/CTr-tTwRH3o