2

如果我有一家商店,比如这个例子:

var myStore = Ext.create("Ext.data.Store", {
    model: "User",
    proxy: {
        type: "ajax",
        url : "/users.json",
        reader: {
            type: "json",
            rootProperty: "users"
        }
    },
    autoLoad: true
});

我想将users.json文件缓存在应用程序缓存中,所以我将其添加app.json如下:

    /**
     * Used to automatically generate cache.manifest (HTML 5 application cache manifest) file when you build
     */
    "appCache": {
        /**
         * List of items in the CACHE MANIFEST section
         */
        "cache": [
            "index.html",
            "users.json"
        ],
        /**
         * List of items in the NETWORK section
         */
        "network": [
            "*"
        ],
        /**
         * List of items in the FALLBACK section
         */
        "fallback": []
    },

查看 Chrome 开发人员工具,我可以看到 .json 文件已正确添加到应用程序缓存中,以及 index.html。

我希望这可以离线“正常工作”。不幸的是,它没有,它尝试请求 json 文件,因为它处于脱机状态,所以它不起作用,然后它不再在应用程序中使用该数据。

应用程序的其余部分工作得很好。有任何想法吗?

4

1 回答 1

0

通过查看 API 文档并对属性进行一些试验和错误,找到了解决方案。这一点都不明显。

问题是,对 .json 文件的请求被附加了额外的参数?dc=XXXXXXX和分页参数。有两个额外的属性需要应用到代理:noCacheenablePagingParams. 这成功了。

var myStore = Ext.create("Ext.data.Store", {
    model: "User",
    proxy: {
        type: "ajax",
        url : "/users.json",
        noCache: false,
        enablePagingParams: false,
        reader: {
            type: "json",
            rootProperty: "users"
        }
    },
    autoLoad: true
});

我还需要更新我的测试 cache.manifest 文件的标题注释,以确保正确检测到对存储的更改,因为我不断收到 Loader 错误。一旦您使用 sencha CMD 构建生产版本,这不是问题,因为它会为您自动生成应用程序缓存文件。

注意:在我的 app.js 文件中,我确实已经有了以下广泛记录的内容:

Ext.Loader.setConfig({
    disableCaching: false
});

希望这对某人有帮助!

于 2013-08-27T16:09:43.927 回答