我将JSON格式存储到store文件夹的Code.js中。
'存储'文件夹 - > 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: 'login',
successProperty: 'success'
}
}
});
'模型'文件夹 - > Code.js
Ext.define('LoginPage.model.Code', {
extend: 'Ext.data.Model',
fields: [
{name: 'username', type: 'string'},
{name: 'password', type: 'string'}
]
});
现在如何在控制器文件夹的Code.js中声明商店的变量?
我的JSON格式如下所示,格式正确:
loginResponse.json
{
"login": [
{
"username": "venkat",
"password": "123"
},
{
"username": "admin",
"password": "345"
},
{
"username": "sam",
"password": "234"
},
{
"username": "paul",
"password": "456"
}
]
}
我试过了:
var store = Ext.create('LoginPage.store.Code');
//showing no errors and also I can't see any items in it
//when checked through Chrome console.
当我将创建的商店变量保留在console.log(store);
编辑:即使凭据正确,以下函数也始终返回
checkJson: function(username, password){
var store = Ext.create('LoginPage.store.Code');
var matched = store.query('username', username);
//console.log(matched);
if(matched.length && matched[0].get('password') === password) {
return true;
}
else{
return false;
}
}
Chrome控制台中的匹配变量消息。 (用户名 =" venkat",密码 =" 123")
答案 0 :(得分:1)
正如大家所说,首先需要知道商店是否已经加载。加载商店后,您可以检查凭据,就像这样
var match = codeStore.findBy(function(record,id) {
if(record.get('username')==credentials.username
&& record.get('password')==credentials.password) {
return true;
}
});
if(match != -1)
alert('correct');
else
alert('incorrect');
我使用您提供的数据但使用本地商店准备了一个示例。我希望它可以帮到你
http://jsfiddle.net/alexrom7/chn8Z/1/
编辑:我没有在标题中看到问题,或者我不知道你是否改变了:p。在这种情况下,您可以通过执行此操作来访问控制器文件中的代码存储Ext.getStore('Code');
答案 1 :(得分:0)
您可以使用 queryBy 方法。此方法中的指定函数将与此Store中的每条记录一起调用。并且您可以在此函数中编写逻辑以检查记录是否存在。
store.queryBy(function(m,id){
});
答案 2 :(得分:0)
我首先检查chrome dev工具的网络选项卡,以确保正确请求并返回了json文件。之后,我会检查store.data.items以查看数据是否通过但未正确解析。最后,我会将成功:true属性添加到您在read调用中返回的json中。这是Ext知道服务器上所有内容按计划进行的唯一方式。