代码之家  ›  专栏  ›  技术社区  ›  Sudipta Dhara

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

  •  2
  • Sudipta Dhara  · 技术社区  · 11 年前

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

    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中的元素来查看localStorage中的id,我在其他部分中确实得到了它的值。但当我试图在代理中使用它时,我只能在我的模型中获取它。我想根据localStorage的值从web服务中获取数据。

    代理中的代码:

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

    我想从这里的localStorage获取id。

    请帮帮我。

    2 回复  |  直到 11 年前
        1
  •  1
  •   rahuldas    11 年前

    我认为以下代码有效

    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,

        2
  •  0
  •   Sudipta Dhara    11 年前

    啊,我发现了一个很棒的把戏。设置的位置 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') },

    来自模型。在我的商店里,我添加了

    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 未添加到代理请求中。

    请帮我解决这个问题。

    推荐文章