马上,这里是二我看到的三种方法:
将过滤器存储在 URL 中(好的)
只需window.location
使用以下命令获取并解析查询字符串dojo/io-query::queryToObject()
:
require(['dojo/io-query'], function (ioQuery) {
var uri = window.location.href;
var query = uri.substring(uri.indexOf("?") + 1, uri.length);
query = ioQuery.queryToObject(query);
});
(dojo/io-query 的文档)
将过滤器存储在 cookie 中(更好)
该dojo/cookie
模块使这非常非常容易:
require(['dojo/cookie', 'dojo/json'], function (cookie, json) {
var filter = { ... };
cookie("myFilter", json.stringify(filter)); //store the cookie
// json.parse(cookie("myFilter"));
// ^-- returns the cookie as a JS object
});
(dojo/cookie 的文档)
显然,用户必须启用 cookie 才能使其工作,但这比将一堆变量存储在 URL 中供他们添加书签要干净得多。
按照Dimitri M的建议使用 HTML5 本地存储:(更好)
检查用户的代理是否支持本地存储,如果支持,则使用该全局变量来保留过滤器:
require(['dojo/json'], function(json) {
function supportsLocalStorage() {
return ('localStorage' in window) && window['localStorage'] !== null;
}
var filter = { ... };
if(supportsLocalStorage()) {
localStorage.setItem("myFilter", json.stringify(filter));
}
// json.parse(localStorage.getItem("myFilter"))
// ^-- returns the filter as a JS object
});
使用网络存储的一个优势是您可以存储比cookie更多的数据。
您可以想象使用 cookie 作为不支持本地存储的浏览器的后备(即supportsLocalStorage()
返回时false
),但代价是为您的设计增加了更多的开销,因此最终由您决定,具体取决于您想要支持的浏览器.
Web 存储的浏览器兼容性