Sencha Touch:从HTML应用程序缓存加载数据到商店?

时间:2013-08-27 13:19:18

标签: json sencha-touch-2 store application-cache

如果我有一个商店,就像这个例子:

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文件,该文件在离线时不起作用,然后它不再在应用程序中使用该数据。

应用程序的其余部分完全正常。有什么想法吗?

1 个答案:

答案 0 :(得分: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
});

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

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

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

希望这有助于某人!