似乎Marionette不是为处理重用视图而设计的。什么是维护视图状态(对于所有视图类型)的有效方法,因为它们总是被重建?
我的第一个想法是在模型中捕捉状态,但我很快就分开了这个想法,因为许多视图可以引用相同的模型。
我确实尝试过以几种不同的方式重复使用视图,但不确定我所做的是正确的。在每种情况下,我觉得我所覆盖的木偶方法可能会破坏事物(现在和/或以后)。
我已经找到了关于如何用纯Backbone实现这一目标的建议,并且还瞥了一眼看起来非常有效地处理状态的长颈鹿,但我还没有为Marionette找到解决方案。
答案 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