【问题标题】:Extjs create storeExtjs 创建商店
【发布时间】:2012-10-01 17:44:28
【问题描述】:

我在创建商店时遇到问题,我需要一些帮助。 我有一个商店,使用 Ex.define 方法创建,它工作得很好。 代码如下:

  Ext.define('path.to.myStore', {
        extend: 'Ext.data.Store',
        model: 'arm4.dict.m.DictBaseModel',
        proxy: {
            type: 'ajax',
            url: 'data/module-dict/PossessionGroundWs/find',

            reader: {
                type: 'json',
                root: 'dataList'
            }
        }
    });

//later
//works fine!
var s =Ext.create('path.to.myStore');
s.load();

现在,问题是我想动态创建商店,没有 Ex.define。 我就是这样做的:

var s = Ext.create('Ext.data.Store', {
    model: 'arm4.dict.m.DictBaseModel',
    proxy: {
        type: 'ajax',
        url: 'data/module-dict/PossessionGroundWs/find',

        reader: {
            type: 'json',
            root: 'dataList'
        }
    }
});

s.load();

如您所见,它使用完全相同的配置,但这不起作用。 我收到此错误:

TypeError: reader.read is not a function    
result = reader.read(me.extractResponseData(response));

当我深入研究 Extjs 代码时,我可以看到阅读器由于某种原因没有初始化。

“阅读器”看起来像这样:

{
    applyDefaults:true
    root:"dataList"
    type:"json"
}

那么,我做错了什么? 你能重现这个错误(bug)吗?

【问题讨论】:

    标签: extjs extjs4 store


    【解决方案1】:

    这是一个老问题,但这个问题很常见。 在我的场景中,我没有定义模型,我忘记使用“Ext.data.Model”扩展我的模型,扩展后它开始正常工作。

    【讨论】:

      【解决方案2】:

      当我的模型定义错误时,我重现了同样的错误。所以回顾一下。就我而言:

      Ext.define('APP.model.web.bdetmclocalidad.BdetMcProvincia', {
          extend: 'Ext.data.Model',
          idProperty : 'idProvincia',
          fields: [
              {name:'codProvincia', type:"string", useNull:true}
              ,{name:'descProvincia', type:"string", useNull:true}
          ],
          proxy : {
              type : 'uxproxy',
              localUrl : 'data/bdetMcProvinciasListado.json',
              remoteUrl : 'bdetmcprovincia'
          }
      });
      
      
      Ext.define('APP.store.web.bdetmcprovincia.BdetMcProvinciaStore', {
          extend : 'Ext.data.Store',
          requires : 'APP.model.web.bdetmcprovincia.BdetMcProvincia',
          model : 'APP.model.web.bdetmcprovincia.BdetMcProvincia',
          filterOnLoad : false,
          remoteSort   : true,
          pageSize     : 25,
          proxy : {
              type : 'uxproxy',
              localUrl : 'data/bdetMcProvinciasListado.json',
              remoteUrl : 'bdetmcprovincia'
          }
      });
      

      我的包名有误(由复制和粘贴引起): APP.model.web.bdetmclocalidad.BdetMcProvincia 不等于 APP.model.web.bdetmcprovincia.BdetMcProvincia

      希望对你有所帮助。

      【讨论】:

        【解决方案3】:

        很抱歉提出了一个多年前的问题,但是当搜索错误 TypeError: reader.read is not a function 时,此页面在 Google 中的排名很高,所以我希望它可能有用。 我遇到了同样的错误,这是由链接到不存在模型的商店引起的,因此请检查您的模型参考是否有任何拼写错误。

        【讨论】:

          【解决方案4】:

          我发现了问题。 我真的不知道这是否是一个错误,但如果您使用 Ext.create(没有 Ext.define)创建您的商店,您必须事先要求您的模型类去创造。

          所以,这很好用:

          Ext.require('arm4.dict.m.DictBaseModel');
          //......
          var s = Ext.create('Ext.data.Store', {
              model: 'arm4.dict.m.DictBaseModel',
          //store definition 
          

          【讨论】:

            【解决方案5】:

            无法重现此错误,但我记得有一天我遇到了它。尝试在这样的单独文件中定义您的阅读器

            Ext.define('My.reader.Default', {
                extend: 'Ext.data.reader.Json',
                alias: 'reader.myreader',
            
                root: 'dataList'
            });
            

            然后

            Ext.create('Ext.data.Store', {
                requires: ['My.reader.Default'],
                model: 'arm4.dict.m.DictBaseModel',
                proxy: {
                    type: 'ajax',
                    url: 'data/module-dict/PossessionGroundWs/find',
                    reader: 'myreader'
                }
            });
            

            也许这会有所帮助。

            【讨论】:

            • 我发现了问题。斯帕西博 :)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-10-22
            • 2012-12-21
            • 1970-01-01
            • 2019-03-10
            • 1970-01-01
            • 1970-01-01
            • 2014-03-11
            相关资源
            最近更新 更多