4

ユーザーが定期的に複雑なフィルターを使用する EnhancedGrid があります。ユーザーがフィルターを保存またはブックマークして、後で簡単に再適用できるようにする方法はありますか? プログラムでフィルターを設定できることはわかっていますが、ユーザーがどのフィルターを必要とするかは予測できません。

ありがとうございました!

編集:自分でいくつかの進歩を遂げました... grid.getFilter() を使用してフィルターの JSON 表現を返し、次に json.stringify(jsonRepresentation) を使用して文字列に変換します。現在、その文字列を保存、読み込み、変換する方法を検討しています。文字列を json オブジェクトにロードし、それをフィルターとして適用すると、XSS 脆弱性にさらされる可能性がありますか? URL の引数としてフィルターを指定したい場合、文字列を圧縮して文字数を減らすことはできますか?

4

2 に答える 2

2

クッキーはどうですか?

グリッド ウィジェットには Cookie プラグイン (リンク) がありますが、id はフィルターを保存しません。プラグインまたはグリッドを拡張することがオプションになる可能性があります。

フィルター プロパティを文字列として渡すこともオプションのように思えます。条件、使用できる値、またはそのタイプを知っていれば、フィルターをグリッドに適用する前に簡単に検証できます。

于 2013-09-18T10:39:59.293 に答える
2

すぐに、ここに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 ストレージのブラウザ互換性

于 2013-09-19T14:13:57.217 に答える