如何使用Ext.state,用localStorage代替cookie的Manager?

llycmphe  于 2022-09-26  发布在  其他
关注(0)|答案(2)|浏览(154)

外部JS外部状态。经理只有Coockie供应商。Cookie只能容纳4096个字节,如果我的网格或树有很多列,它就会溢出4096个比特,无法保存状态。另一个问题是,每一个对服务器的请求都会发送请求中的所有cookie,所以Apache或其他web服务器不允许使用大型cookie。
我想使用Provider在localStorage中保存数据。有现成的解决方案吗?还是我必须写?

llmtgqce

llmtgqce1#

这里是我现在使用的变通方法,但可能还有更复杂的解决方案吗?

Ext.state.Manager.setProvider(new Ext.state.CookieProvider({
    setCookie : function(name, value){
       var me = this;
       localStorage.setItem(me.prefix+name,me.encodeValue(value));
    },
    clearCookie : function(name){
        var me = this;
        localStorage.removeItem(me.prefix+name);
    },
    readCookies : function(){
        var prefix = this.prefix,
            len = prefix.length,
            cookies = {};
            keys = Object.keys(localStorage),
            i = 0;
        for (; i < keys.length; i++) {
            console.log(keys[i].substring(0, len));
            if (keys[i] && keys[i].substring(0, len) == prefix){
            cookies[keys[i].substr(len)]= this.decodeValue(localStorage.getItem(keys[i]));
        }
    }
        return cookies;
    }
}));
e4eetjau

e4eetjau2#

Ext.state.LocalStorageProvider类已添加到2011年3月30日发布的Ext JS 4 Beta 1中的ExtJS中。请参阅原始文档和实施以及截至2022年3月11日的当前DocsImplementation

Ext.state.Manager.setProvider(new Ext.state.LocalStorageProvider());

相关问题