Json 如何引用存储在控制器-->;Code.js文件?

Json 如何引用存储在控制器-->;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

我将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/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