2011-09-21 133 views
0

如果使用登录表单获得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(); 

不知怎的,它看起来太复杂,我(和它不反正工作)。你将如何解决这个问题?

回答

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();

+0

非常感谢。解决了我的问题。 – Khush

0

从粗略看,它看起来像一个可能的方式来做到这一点。

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

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

谢谢回答,我去与较长的答案,但在ModelMgr也给我下一个问题解决一个很好的起点。 – Beffa

相关问题