【问题标题】:ExtJS localstorage proxy model/store issueExtJS 本地存储代理模型/存储问题
【发布时间】:2015-05-23 04:16:52
【问题描述】:

我正在使用 ExtJS 5.1.0 并遇到了一个奇怪的问题。

我有以下型号:

Ext.define('cardioCatalogQT.model.Load', {
    extend: 'Ext.data.Model',

    config:{
        idProperty: 'id',
        fields: [
            {name: 'key', type: 'string'},
            {name: 'comparator', type: 'string'},
            {name: 'value', type: 'string'},
            {name: 'type', type: 'string'}
        ]

    }
});

还有商店:

Ext.define('cardioCatalogQT.store.Payload', {
    extend: 'Ext.data.Store',
    alias: 'store.Payload',
    // add package.framework=ext to .sencha/app/sencha.cfg
    config:{

        model: 'cardioCatalogQT.model.Load',
        storeId: 'Payload',
        autoLoad: true,

        proxy: {
            type: 'localstorage'
        }
    }
});

当我向商店添加记录时:

var payload = Ext.create('cardioCatalogQT.store.Payload');

payload.add({
    type: 'dx',
    key: item.data.code,
    comparator: 'eq',
    value: item.data.description
});

payload.sync();

localstorage中的数据与附图中除了#7和#11之外的所有记录类似

但是,当我像这样将字段元素添加到商店时:

Ext.define('cardioCatalogQT.store.Payload', {
    extend: 'Ext.data.Store',
    alias: 'store.Payload',
    // add package.framework=ext to .sencha/app/sencha.cfg
    config:{
        idProperty: 'id',
        fields: [
            {name: 'type', type: 'string'},
            {name: 'key', type: 'string'},
            {name: 'comparator', type: 'string'},
            {name: 'value', type: 'string'}
        ] ,

        //model: 'cardioCatalogQT.model.Load',
        storeId: 'Payload',
        autoLoad: true,

        proxy: {
            type: 'localstorage'
        }
    }
});

我在 7 和 11 得到了想要的结果。

另一个问题是,我没有为模型记录提供实际名称,而是为模型实例获得了非常无用的名称 ext-data-proxy-localstorage-N。

另外,我在通过商店引用模型时遇到此错误:

[错误] 加载资源失败:服务器响应状态为 404(未找到)(cardioCatalogQT.model.Load,第 0 行)

我已经构建了一个 sencha 应用程序,没有抛出任何错误。

知道我做错了什么(我基本上是在做我用 Sencha Touch 所做的事情,我在这方面取得了很大的成功)?这是一个错误,也许?

【问题讨论】:

  • 对于404错误:商店中的模型声明不应该只是简短model : Load吗?
  • 有趣。这个我没试过。我曾假设(可能是错误的)我必须提供完整的命名空间。

标签: extjs model local-storage store


【解决方案1】:

ExtJS 的问题,要在商店中获得所需的名称,您必须在代理中指定和 id:

 proxy: {
            type: 'localstorage',
            id  : 'payload'
        }

现在,我的 localstorage 中的模型实例按需要显示,我可以使用标准方法(如 findRecord)查询它们。好时光!

故事的寓意:ExtJS 的行为与 Touch 不同

【讨论】:

  • 帮助阅读 API 文档,而不是假设行为将是相同的 (docs.sencha.com/extjs/5.1/5.1.0-apidocs/#!/api/…):“我们的搜索模型只包含两个字段 - id 和查询 - 加上一个代理定义。我们需要传递给 LocalStorage 代理的唯一配置是一个 id。这很重要,因为它将此代理中的模型数据与所有其他数据分开。localStorage API 将所有数据放入一个共享命名空间中,因此通过设置一个 id 我们启用 LocalStorageProxy管理已保存的搜索数据。”
  • 你是如何指定 id 属性的?我正在使用煎茶建筑师,它不会让我这样做
  • 我使用 vim 插件在 IDE (WebStorm) 中手动完成所有操作。我从来没有遇到过手动创建模型和商店的问题。事实上,我强烈建议你试试这个,因为你显然可以更好地控制这个过程(永远不要相信 GUI 设备会为你做这件事)。
猜你喜欢
  • 2020-04-22
  • 2015-03-21
  • 2013-02-14
  • 1970-01-01
  • 2011-11-24
  • 2014-02-06
相关资源
最近更新 更多