How to refer the store in Controller --> Code.js file?

╄→гoц情女王★ 提交于 2019-12-12 03:29:12

问题


I am storing the JSON format in to Code.js of store folder.

'store' folder --> 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'
           }
    }
});

'model' folder --> Code.js

Ext.define('LoginPage.model.Code', {
   extend: 'Ext.data.Model',
   fields: [
       {name: 'username', type: 'string'},
       {name: 'password', type: 'string'}   
   ]
});

Now how to declare the variable of the store in Code.js of controller folder?

My JSON format is as shown below which is in correct format:

loginResponse.json

{
"login": [
  {
    "username": "venkat",
    "password": "123"
  },
  {
    "username": "admin",
    "password": "345"
  },
  {
    "username": "sam",
    "password": "234"
  },
  {
    "username": "paul",
    "password": "456"
  }
]
}

I tried :

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.

The chrome console shows the following message when I keep the created store variable in console.log(store);

EDIT: The following function is always returning false even if the credentials are correct

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;
    }
 }  

matched variable message in Chrome console. (username = "venkat", password = "123")


回答1:


As everyone said, you first need to know if the store has been loaded. Once the store is loaded you could check the credentials just like this

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');

I prepared an example with the data you provided but using a local store. I hope it can help you

http://jsfiddle.net/alexrom7/chn8Z/1/

EDIT: I didn't see the question in the title or I don't know if you changed :p. In that case, you can access the code store in your controller file by doing this

Ext.getStore('Code');



回答2:


You can use queryBy method. Specified function inside this method will be called with each record in this Store. and you can write your logic inside this function to check if records is exist or not.

store.queryBy(function(m,id){

});




回答3:


I would start with checking in the network tab of chrome dev tools to make sure that your json file was correctly requested and returned. After that, I would check in store.data.items to see if the data was getting through but wasn't getting parsed correctly. And finally, I would add the success: true property to the json you return in the read call. That's the only way Ext knows everything on the server went as planned.



来源:https://stackoverflow.com/questions/14854089/how-to-refer-the-store-in-controller-code-js-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!