检查json数据以便在extjs中进行比较

时间:2013-02-13 08:12:52

标签: json extjs extjs4.1 extjs-mvc

我使用extjs MVC创建了一个简单的登录页面,以了解extjs的MVC架构。正如您在下面看到的,我正在尝试将json数据存入商店,然后我将使用输入的登录凭据检查该数据中的每个用户名和密码。我现在感到困惑的是,如何检查store文件夹中存在的检索到的json数据中的用户名和密码到view文件夹中? (下面的代码只是带问题的相关代码)

我知道这可能会引发安全威胁,因为我正在检查客户端。

'view'文件夹 - > Code.js

function checkJson(username, password){
    //if matched, return true.
    //else, return false.
}

'model'文件夹 - > Code.js

Ext.define('AM.model.User', {
   extend: 'Ext.data.Model',
   fields: ['name', 'email']
});

'store'文件夹 - > Code.js

Ext.define('LoginPage.store.Code', {
   extend: 'Ext.data.Store',
   model: 'LoginPage.model.Code',
   autoLoad: true,


   proxy: {
        type: 'ajax',
        api: {
            read: 'data/loginResponse.json',
            update: 'data/checkCredentials.json'  //Contains:  {"success": true}
        },
        reader: {
            type: 'json',
            root: 'loginResponse',
            successProperty: 'success'
        }
   }
});

loginResponse.json

{
"form": {
   "login": [
     {
       "username": "venkat",
       "password": "123"
     },
     {
       "username": "admin",
       "password": "345"
     }
   ]
}

1 个答案:

答案 0 :(得分:1)

您应该将代码的检查部分放到Controller中(视图用于演示)。在视图中使用登录名和密码字段定义某个表单。在表单clickOK)按钮上的Controller catch Login事件中,获取表单值(登录名+密码),然后使用Ext.data.Store.query()方法查找更合适或不合适的凭据:

查看here示例,了解如何在MVC中使用控制器来捕获事件;

在你的Controller中:

init: function() {
    this.control({
        '#form_ok_button': { // this is the `id` property of your form's Login button
            click: function(button) {
                 var fValues = button.up('form').getValues(); // Assume your button is bound to the form
                 // Or you can use `Controller.refs` property (http://docs.sencha.com/ext-js/4-1/#!/api/Ext.app.Controller-cfg-refs) to get form
                 var matched = store.query('username', fValues.username);
                 if(matched.length && matched[0].get('password') === fValues.password) {
                     // login OK!
                 }
            }
        }
    });
},

如何使用refs(在控制器中):

refs: [
   { ref: 'usernameField', selector: '#username_field' }, // username field id is "username_field"
   { ref: 'passwordField', selector: '#password_field' }, // password field id is "password_field"
],

init: function() {  
   this.control({
       '#form_ok_button': {
            click: function() {
                // with `refs` autogetters are created for every `ref`:
                var username_field = this.getUsernameField();
                var password_field = this.getPasswordField();
            }
        }
   })
}

您可以阅读referencing here

对于Ext.app.Controller.stores数组中的每个商店,也会创建自动注册(在您的情况下,Code商店使用this.getCodeStore()在控制器中。)

以下是流程:

  1. 您可以使用this.getUsernameField()this.getPasswordField();
  2. 获取用户名和密码字段值
  3. query()存储用户名
  4. 如果商店中存在用户名,则检查密码是否适合。