【问题标题】:dojo tree checkbox lost when reload重新加载时道场树复选框丢失
【发布时间】:2015-05-13 10:54:19
【问题描述】:

我正在处理 .jsp 页面、spring MVC、dojo 1,10.2。我已经使用带有复选框的 dojo 树创建了 JSP 页面。当我单击下一步按钮时,它将进入下一个 jsp 页面。如果我按下后退按钮,树重新加载并且所有复选框都未选中。

当按下后退按钮时,我怎样才能检查所有以前选中的复选框。是否需要先保存复选框状态才能进入下一页,然后勾选引用已保存数据的复选框。

还有其他方法可以实现吗?

【问题讨论】:

  • 我认为您基本上有正确的想法,因为您必须保存复选框的状态并在返回时参考它们

标签: checkbox dojo reload


【解决方案1】:

网络是一个无状态的地方,所以是的,您必须将状态保存在某个地方,有几种方法可以做到这一点...您可以依靠后端服务将它们存储在数据库/文件/...中,或者您可以使用新的 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 上查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多