我想缓存ItemView html与一个(或潜在的它自己的)区域在木偶。
这个过程以不同的形式在不同的视图中进行。在访问每个阶段时,我们希望附加显示特定的ItemView,但我们也希望能够重新访问任何以前的视图,它是html,以更改表单数据并通过更新后续视图继续。
这里我刚刚添加了路由呼叫区域的视图。
buildView: function (page) {
try {
var view = new View[page]();
} catch (error) {
console.debug('This View Doesn\'t Exsist --> [' + page + ']', error);
}
Layout.body.show(view, { preventDestroy: true });
}
我可以为每个ItemView使用不同的区域来保留上一个视图。。
buildView: function (page) {
var _region = Layout[page], _view;
if (_region.hasView()) {
_region.show(_region.currentView);
} else {
try {
_view = new View[page]();
} catch (error) {
console.debug('This View Doesn\'t Exsist --> [' + page + ']', error);
}
_region.show(_view, {preventDestroy: true});
}
}
有人知道这种类型的使用和显示以前的ItemView的一个好的解决方案,同时能够更新新的视图,如果必要的话?
我们是否应该在需要时恢复到隐藏和显示每个区域,并让它存储呈现的html?
如果有人不确定我想在这里解释什么,很高兴提供更多信息!
谢谢,对不起,我的回答很粗糙,可能不是很有见地。
有很多不同的方法可以做到这一点,但我建议不要尝试缓存和重用视图。它不会显著提高性能,丢弃视图并创建新视图也没什么错。
如果我这样做,我会考虑把每一步看作是一个集合中的模型,然后每一个逐步添加的视图都可以访问整个集合,如果它需要知道先前视图中的数据。
下面是一些假设代码,它们可能与您的用例匹配,也可能与您的用例不匹配:
var steps = new Backbone.Collection();
steps.add({
name: null,
address: null
});
var view1 = new Step1View({ model: steps.last() });
region.show(view1);
//...
//now something happens and you're ready to show the next view
steps.add({
age: null,
occupation
})
var view2 = new Step2View({ model: steps.last() });
//if view2 needs to know about previous steps it has access to all the data as this.model.collection
region.show(view2);
//...
//now if you need to go back you can just pop the last model off the stack and show the view1 again
steps.pop();
var view1 = new Step1View({ model: steps.last() });
region.show(view1);