重新加载时dojo树复选框丢失

时间:2015-05-13 10:54:20

标签: checkbox dojo reload

我正在开发.jsp页面,spring MVC,dojo 1,10.2。我创建了带有复选框的dojo树的JSP页面。当我单击下一个按钮时,它将进入下一个jsp页面。如果我按下后退按钮,树重新加载,所有复选框都将取消选中。

按下后退按钮时,如何选中所有先前选中的复选框。我是否需要在转到下一页之前保存复选框状态,然后选中参考已保存数据的复选框。

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

网络是一个无国籍的地方,所以是的,你必须在某个地方保存状态,有几种方法可以做到这一点......你可以依赖将数据存储在数据库/文件/ ...中的后端服务,或者您可以使用其中一种新的HTML5功能,如会话存储或本地存储。

以会话存储为例,您可以这样做:

首先,您需要一些函数来加载和存储数据。由于您只能在session-和localstorage中存储简单字符串,因此我将它们序列化为JSON:

var store = {
    save: function(object) {
        sessionStorage.setItem('fruits', JSON.stringify(object));
    },
    load: function() {
        return JSON.parse(sessionStorage.getItem('fruits') || '{}');
    }
};

然后在每次更改时都可以存储数据:

registry.byId("apple").on("change", function(value) {
    fruits.apple = value;
    store.save(fruits);
});
registry.byId("banana").on("change", function(value) {
    fruits.banana = value;
    store.save(fruits);
});
registry.byId("lemon").on("change", function(value) {
    fruits.lemon = value;
    store.save(fruits);
});

最初您可以加载数据:

var fruits = store.load();

并使用它来初始化小部件的状态:

registry.byId("apple").set("value", fruits.apple || false);
registry.byId("banana").set("value", fruits.banana || false);
registry.byId("lemon").set("value", fruits.lemon || false);

这是一个示例:http://jsfiddle.net/3b2s15xm/尝试更改选项并重新加载页面。通常情况下,复选框会再次被取消选中,但现在它会在您加载页面时从会话存储中重新加载数据。

您需要知道的一件事是,您需要支持的浏览器是否具有这些HTML5功能,您可以在caniuse.com上查看。