Sencha localStorage.getItem()在模型中返回null

时间:2014-08-23 14:20:33

标签: sencha-touch-2

在我的模型中,我有以下代码:

Ext.define('Proximity.model.CandidateblocklistModel', {
    extend: 'Ext.data.Model',
    requires: ['Ext.data.proxy.LocalStorage'],
    config: {
        store:'Proximity.store.CandidateblockStore',
        fields: [
            { name: 'id', type: 'id' },
            { name: 'name', type: 'string' },
            { name: 'img', type: 'string' },
            { name: 'designation', type: 'string' },
            { name: 'summary', type: 'string' },
            { name: 'experience', type: 'string' },
            { name: 'industry', type: 'string' },
            { name: 'functionnml', type: 'string' },
            { name: 'role', type: 'string' }
        ],
        proxy : {
            type : 'ajax',
            url : Proximity.util.Config.getBaseUrl() + '/index.php/candidate/getcandidateblock',
            withCredentials: false,
             useDefaultXhrHeader: false,
            extraParams: {
                "id": localStorage.getItem('id')
            },
            reader : {
                    filters: [
                    Ext.create('Ext.util.Filter', {
                        property: 'name'
                    })
                ]
            }
        }
    }
});

在调用此模型之前,已设置本地存储中的ID。我可以通过Chrome中的inspect元素看到localStorage中的id,我确实在其他部分获得了它的值。但是当我试图在代理中使用它时,我只能在我的模型中得到它。我想根据localStorage的值从我的Web服务获取数据。

我的代理中的代码:

extraParams: {
    "id": localStorage.getItem('id')
},

我想在这里获取localStorage的id。

请帮帮我。

2 个答案:

答案 0 :(得分:1)

我认为以下代码有效

proxy : {
            type : 'ajax',
            url : Proximity.util.Config.getBaseUrl() + '/index.php/candidate/getcandidatebest',
            withCredentials: false,
             useDefaultXhrHeader: false,
            extraParams: {
                id: localStorage.getItem('id')
            },
            reader : {
                    filters: [
                    Ext.create('Ext.util.Filter', {
                        property: 'ind_id',
                        property: 'fun_id',
                        property: 'role_id',
                        property: 'id'
                    })
                ]
            }
        }

然后使用store的过滤工具传递localstorage值。为此,请提供过滤权限remoteFilter: true,

答案 1 :(得分:0)

啊,我发现了一个很棒的技巧。在模型中设置extraParams的实例,将其设置在同一模型的商店中。 我的新代码如下。 Ext.define('Proximity.model.RecruiterbestlistModel', { extend: 'Ext.data.Model', config: { store:'Proximity.store.RecruiterbestStore', fields: [ { name: 'id', type: 'int' }, { name: 'name', type: 'string' }, { name: 'img', type: 'string' }, { name: 'company', type: 'string' }, { name: 'summary', type: 'string' }, { name: 'address', type: 'string' }, { name: 'industry', type: 'string' }, { name: 'functionnml', type: 'string' }, { name: 'role', type: 'string' } ], proxy : { type : 'ajax', url : Proximity.util.Config.getBaseUrl() + '/index.php/recruiter/getrecruiterbest/', withCredentials: false, useDefaultXhrHeader: false, reader : { filters: [ Ext.create('Ext.util.Filter', { property: 'ind_id', property: 'fun_id', property: 'role_id' }) ] } } } });

看,我删除了代码

extraParams: { "id": localStorage.getItem('id') },

来自Model。在我的商店,我添加了

listeners: { beforeload: function(store){ this.getProxy().setExtraParams({ id: localStorage.getItem('id') }); return true; },

所以我的新商店代码如下

Ext.define('Proximity.store.RecruiterbestStore', { extend: 'Ext.data.Store', alias: 'store.recruiterbeststore', config: { model: 'Proximity.model.RecruiterbestlistModel', autoLoad: true, remoteFilter: true, storeId: 'recruiterbeststore' }, listeners: { beforeload: function(store){ this.getProxy().setExtraParams({ id: localStorage.getItem('id') }); return true; } } });

它解决了我的问题。

  

但现在我有另一个问题。在运行sencha app build native(使用cordova bild)后,我又遇到同样的问题,extraParam未添加到代理请求中。

请帮我解决这个问题。