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