提问者:小点点

木偶/骨干视图缓存


我想缓存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?

如果有人不确定我想在这里解释什么,很高兴提供更多信息!

谢谢,对不起,我的回答很粗糙,可能不是很有见地。


共1个答案

匿名用户

有很多不同的方法可以做到这一点,但我建议不要尝试缓存和重用视图。它不会显著提高性能,丢弃视图并创建新视图也没什么错。

如果我这样做,我会考虑把每一步看作是一个集合中的模型,然后每一个逐步添加的视图都可以访问整个集合,如果它需要知道先前视图中的数据。

下面是一些假设代码,它们可能与您的用例匹配,也可能与您的用例不匹配:

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