2013-02-13 78 views
0

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

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

'视图' 文件夹 - > Code.js

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

'模型' 文件夹 - > Code.js

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

'存储' 文件夹 - > 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

你应该把代码给控制器的核对部(视图,可以在演示文稿)。在视图中定义一些带有登录和密码字段的表单。在控制器抓click事件的形式OKLogin)按钮,获取表单值(登录+密码),然后用Ext.data.Store.query()方法找到阉凭据适合或不喜欢:为例子来说明如何使用控制器在MVC到

here捕捉事件;

在你的控制器放置:

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

你可以阅读有关referencinghere

对于Ext.app.Controller.stores中的每个商店阵列自动生成器也创建(在您的情况下为Code店内使用this.getCodeStore()内部控制器)。

这里是流量:

  1. 你得到this.getUsernameField()this.getPasswordField()用户名和密码的字段值;
  2. query()用于用户名的存储区
  3. 如果用户名存在于商店中,则检查密码是否适合。
+0

感谢您的回复。这里的“form”是什么? – 2013-02-13 08:26:55

+0

查看修改的答案 – 2013-02-13 08:34:45

+0

+1谢谢你让我明白了解结构:)。问题是我的按钮没有绑定到任何形式,它只出现在一个容器中。该容器还有两个文本字段,其中包含用户名和密码。我正在获取这些文本字段值,并试图在函数中进行匹配,即函数checkJson(username,password)',如我的文章所示。 – 2013-02-13 08:50:32