localStorage доступен только после обновления - PullRequest
1 голос
/ 07 марта 2012

Я разрабатываю мобильное веб-приложение, используя Sencha Touch 2.0.0.RC , но я не думаю, что моя проблема связана с этой платформой.

Вот рабочий процесс:

При запуске загружается app.js и проверяется, существует ли токен в локальном хранилище:

launch: function() {
    if (localStorage.getItem('myToken')) {
        Ext.create('MyApp.view.Viewport');
    }
    else{
        Ext.create('MyApp.view.Login');
    }
}

Поскольку я загружаю приложение в первый раз, токена нетнайдено, поэтому создается представление входа в систему.

В контроллере login.js функция submitLoginForm получает значения формы и отправляет запрос ajax в API отдыха:

submitLoginForm: function () {
    var formValues = this.getLoginForm().getValues();

    Ext.Ajax.request({
        scope: this,
        url: 'http://mydomain.com/api/login/token',
        method: 'POST',
        params: formValues,
        success: function (response) {
            var result = Ext.JSON.decode(response.responseText);
            if (result.success) {
                localStorage.setItem('myToken', result.token);
                var viewport = Ext.create('MyApp.view.Viewport');
                this.getLoginForm().setHidden(true);
                viewport.show();
            }
            else{
                Ext.Msg.alert('Error', 'Bad username or password');
            }
        },
        failure: function () {
            // 
        }
    });
}

Когда имя пользователя и пароль верны, возвращается токен, который я сохраняю в localStorage.После этого я создаю и показываю другое представление ( viewport.js ), которое использует токен для доступа к API:

store: {
    //...
    proxy: {
        //...
        url: 'http://mydomain.com/api/controller/function/?token=' + localStorage.getItem('myToken')
    }
}

В этот момент URL-адрес выглядит следующим образом:

http://mydomain.com/api/controller/function/?token=null&...

Но когда я обновляю свой браузер, все в порядке, и токен возвращается:

http://mydomain.com/api/controller/function/?token=tokenValue&...

Я также могу полностью закрыть свой браузер, открыть его снова и получить доступ ко всему моему приложению беззапрашивается логин.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Проблема была связана с моим неправильным пониманием Сенча Touch. Я создавал магазин в конфиге, который вызывается до всего, что я описал. mitchellsimoens был действительно правильным человеком, он быстро ответил и сам понял, что я создаю свой магазин в конфигурации моего представления ... http://www.sencha.com/forum/showthread.php?185690-localStorage-accessible-only-after-refresh

0 голосов
/ 08 марта 2012

Не могли бы вы просто использовать встроенный прокси-сервер localalstorage?

См. http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Store-cfg-proxy

Затем просто установите прокси-сервер следующим образом:

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

Тогдазапросите данные в вашем магазине.

...