すぐに、ここに2私が見る3つのアプローチ:
フィルターを URL に保存する(OK)
を使用してクエリ文字列を取得し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 Local Storage を使用します:(さらに良い)
ユーザーのエージェントがローカル ストレージをサポートしているかどうかを確認し、サポートしている場合は、そのグローバル変数を使用してフィルターを保持します。
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
});
Web ストレージを使用する利点は、 Cookie よりもはるかに多くのデータを保存できることです。
おそらく、ローカル ストレージをサポートしていないブラウザーのフォールバックとして Cookie を使用することができます (つまり、 をsupportsLocalStorage()
返すときfalse
)。ただし、設計に少しオーバーヘッドを追加するという犠牲を払ってください。サポートするブラウザーに応じて、最終的にはあなたの呼び出しになります。 .
Web ストレージのブラウザ互換性