Json 如何引用存储在控制器-->;Code.js文件?
我将JSON格式存储在store文件夹的Code.js中 'store'文件夹-->Code.jsJson 如何引用存储在控制器-->;Code.js文件?,json,extjs,extjs4,extjs4.1,extjs-mvc,Json,Extjs,Extjs4,Extjs4.1,Extjs Mvc,我将JSON格式存储在store文件夹的Code.js中 'store'文件夹-->Code.js Ext.define('LoginPage.store.Code', { extend: 'Ext.data.Store', model: 'LoginPage.model.Code', autoLoad: true, proxy: { type: 'ajax', api: { read: 'data
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'
}
}
});
Ext.define('LoginPage.model.Code', {
extend: 'Ext.data.Model',
fields: [
{name: 'username', type: 'string'},
{name: 'password', type: 'string'}
]
});
'model'文件夹-->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'
}
}
});
Ext.define('LoginPage.model.Code', {
extend: 'Ext.data.Model',
fields: [
{name: 'username', type: 'string'},
{name: 'password', type: 'string'}
]
});
现在如何在controller文件夹的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.
当我将创建的store变量保存在console.log(store)中时,chrome控制台显示以下消息代码>
编辑:以下函数始终返回false,即使凭据正确
匹配了Chrome控制台中的变量消息。(用户名=“venkat”、密码=“123”)
您可以使用查询方法。将使用此存储中的每条记录调用此方法中指定的函数。您可以在这个函数中编写逻辑来检查记录是否存在
store.queryBy(function(m,id){
})) 我将首先检查chrome dev tools的网络选项卡,以确保正确请求并返回json文件。在那之后,我会检查store.data.items以查看数据是否已通过,但未正确解析。最后,我将把success:true属性添加到您在read调用中返回的json中。这是Ext知道服务器上的一切按计划进行的唯一方法。正如大家所说,您首先需要知道存储是否已加载。加载存储后,您可以像这样检查凭据
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');
我用您提供的数据准备了一个示例,但使用的是本地存储。我希望它能帮助你
编辑:我没有看到标题中的问题,或者我不知道你是否更改了:p。在这种情况下,您可以通过执行以下操作来访问控制器文件中的代码存储
Ext.getStore('Code');
看起来这些东西都在那里<代码>总计数
为4
。您可能需要阅读文档。。。我正在将我的存储扩展到Ext.data.store
。。(以前缩进不太好)记住,远程加载存储中的数据是一项异步任务……因此存储不会在创建时立即填充数据,因为它需要发出远程请求,处理来自远程服务器的响应,解析响应,并将数据转换为模型实例。因此,如果您需要在数据加载后处理存储,则需要挂接存储的加载事件,并在那里进行处理。此外,我强烈建议您不要继续使用这种方法进行登录检查。您永远不应该在服务器的JSON响应中返回密码,无论它的散列和盐析程度有多高。@existdiscoble您知道这一点。。我只是想在这里学习。谢谢你的建议:)我一直没有看到你的编辑:D.谢谢你的建议。为什么只有返回true
在匹配变量中有效?为什么不返回0
或其他什么呢?我使用data=data
是因为我使用的是本地存储。变量数据是我刚刚在代码中创建的json。您创建的存储看起来不错,它加载了所有记录(根据您发布的console.log(存储)。我认为本例中的问题在于控制器文件,我将发布它的外观。因为根据文档,我们正在使用存储区的findBy函数:*findBy**(fn,[scope],[startIndex]):Number通过函数查找此存储区中第一条匹配记录的索引。如果函数返回true,则将其视为匹配。因此,在作为参数插入的函数中,只需指示是否存在匹配项。如果没有匹配,它将返回-1