如何在Controller中引用商店 - > Code.js文件?

时间:2013-02-13 12:55:08

标签: json extjs extjs4 extjs4.1 extjs-mvc

我将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);

时,Chrome控制台会显示以下消息

enter image description here

编辑即使凭据正确,以下函数也始终返回

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")

enter image description here

3 个答案:

答案 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知道服务器上所有内容按计划进行的唯一方式。