如何在localstorage中存储登录凭据

时间:2011-09-21 14:21:33

标签: javascript sencha-touch local-storage extjs

如果使用登录表单获得了sencha touch应用程序。对于返回用户,我想将登录凭据存储在本地存储中。

user.js的

App.models.User = Ext.regModel('User', {
    fields: [
         {
            name: 'username',
            type: 'string'
        }, {
            name: 'password',
            type: 'string'
        }
    ],

    proxy: {
        type: 'localstorage',
        id: 'p2s-users'
    }
});

Users.js

App.stores.users = new Ext.data.Store({
    model: 'User',
    autoLoad: true
});

现在我尝试将表单值与本地存储同步,我该怎么做,读取/获取它的活动流程是什么?

为了阅读,我会这样做:

var model = new App.models.User();
users = App.stores.users.load();
if (users.data.length > 0 ) {
   model = users.getAt(0);
 } else {
   App.stores.users.create();
 }
 form.load(model);

写作:

 form.model.set(form.data);
 form.model.save();
 App.stores.users.sync();

不知何故,它看起来太复杂了(无论如何它都不起作用)。你会如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

首先确保正确保存模型。例如,这样做:

var model = new App.models.User();
    model.data.username = 'theUser';
    model.data.password = 'thePass';
    model.save(); //the actual saving. Use chrome developer tools to see the local storage

然后从localstorage

加载模型
users = App.stores.users.load();
model = users.getAt(0);

检查加载的模型是否正常,并将其加载到load(model)

的表单中

表格可能是这样的:

new Ext.Application({
launch: function() {
    new Ext.form.FormPanel({
            id:'theForm',
            fullscreen: true,
            defaults: {
                labelAlign: 'top',
                labelWidth: 'auto',
            },
            items: [
                {
                    id : 'userName',
                    name : 'username',
                    label: 'Email',
                    xtype: 'emailfield',
                },
                {
                    id : 'userPassword',
                    name: 'password',
                    label: 'Password',
                    xtype: 'passwordfield',
                }
             ]
        });
     }
});

然后像这样Ext.getCmp('theForm').load(users.getAt(0));

加载记录

从表单中获取模型:Ext.getCmp('theForm').getRecord();

答案 1 :(得分:0)

从粗略的看,它看起来像是一种可行的方法。

但是,您应该从模型管理器创建模型实例,例如:

Ext.ModelMgr.create({username: 'foo', password: 'bar'}, 'User');