我使用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"
}
]
}
答案 0 :(得分:1)
您应该将代码的检查部分放到Controller中(视图用于演示)。在视图中使用登录名和密码字段定义某个表单。在表单click
(OK
)按钮上的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()
在控制器中。)
以下是流程:
this.getUsernameField()
和this.getPasswordField()
; query()
存储用户名