Sencha Touch: загружать данные в хранилище из кеша приложения HTML?

Если у меня есть магазин, как в этом примере:

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, который не работает, поскольку он находится в автономном режиме, а затем больше не использует эти данные в приложении.

В остальном приложение работает отлично. Есть идеи?


person Adam Marshall    schedule 27.08.2013    source источник


Ответы (1)


Нашел решение, изучив документацию API и немного проб и ошибок со свойствами. Это вовсе не очевидно.

Проблема заключалась в том, что запросы на файлы .json добавлялись с дополнительными аргументами, ?dc=XXXXXXX и аргументами подкачки. Есть два дополнительных свойства, которые необходимо применить к прокси: noCache и enablePagingParams. Это помогло.

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, чтобы убедиться, что изменения в хранилищах были обнаружены правильно, поскольку я продолжал получать ошибки загрузчика. Это не проблема, если вы используете sencha CMD для сборки производственной версии, поскольку она автоматически генерирует для вас файл кеша приложения.

ПРИМЕЧАНИЕ. У меня уже было следующее, широко задокументированное, в моем файле app.js:

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

Надеюсь, это поможет кому-то!

person Adam Marshall    schedule 27.08.2013