1

我正在使用Sencha Touch 2.0.0.RC开发一个移动 Web 应用程序,但我认为我的问题与这个框架无关。

这是工作流程:

启动时,会加载app.js并检查本地存储中是否存在令牌:

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

因为我是第一次加载应用程序,所以没有找到令牌,所以创建了登录视图。

login.js控制器中,submitLoginForm函数获取表单值并将 ajax 请求发送到 rest 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')
    }
}

在那一刻,网址看起来像这样:

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

但是当我刷新浏览器时,一切都很好,令牌又回来了:

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

我也可以完全关闭我的浏览器,再次打开它并访问我的整个应用程序而无需登录。

4

2 回答 2

1

问题与我对 Sencha Touch 的误解有关。我在配置中创建了一个商店,该商店在我描述的所有内容之前被调用。mitchellsimoens 确实是合适的人选,他确实快速回答并自己理解我是在我的视图配置中创建我的商店... http://www.sencha.com/forum/showthread.php?185690-localStorage-只能在刷新后访问

于 2012-03-07T22:36:46.373 回答
0

你不能只使用内置的本地存储代理吗?

请参阅http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Store-cfg-proxy

然后只需像这样设置代理:

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

然后查询您的商店以获取数据。

于 2012-03-07T20:54:39.707 回答