0

在 ExtJS MVC 应用程序中,我在哪里存储用户特定(会话)信息?

定义一个可以包含具有用户特定信息的对象并在应用程序中使用它的自定义基本控制器是否正确?

例子:

Ext.define("MyApp.controller.BaseController", {
    extend:  "Ext.app.Controller", 

    session:  Ext.create("MyApp.lib.UserSession"),

    init: function() {
      var me = this;

      me.session.init();

      /** some code **/
    },

    doSomething: function() {
      var me = this;

      var counter = me.session.get("counter"); 
    }

});
4

4 回答 4

5

如果您需要在页面刷新后保留数据,您可以使用 Ext.state.Manager。

在应用程序启动期间使用CookieLocalStorage提供程序设置状态管理器:

Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

// Shortcut for quick reference across the project, if MyApp.user is null - user is not authorized.
MyApp.user = Ext.state.Manager.get('user');

在授权或其他操作后保存您需要为当前用户保留的数据:

Ext.state.Manager.set('user', {
  first_name: 'John'
  last_name: 'Doe'
});
于 2012-10-22T22:08:29.683 回答
0

我已经完成了一些不同的应用程序,这些应用程序涉及用户在首次启动应用程序时从他们的会话中提取的特定权限设置。

我用几种不同的方法来做这件事,但我开始认识到用户权限数据都最适合 MVC 的模型上下文。考虑到这一点,我决定把它全部放在商店里。

这很好。如果您按照 MVC 指南创建商店,您始终可以从应用程序中的任何位置调用用户会话数据Ext.getStore('SessionStoreId')

于 2012-10-22T21:24:04.033 回答
0

根据应用程序目标,我有两种方法。

我的首选方法是为我想要在本地保存的模型使用 LocalStorage 代理,这样我在应用程序中与它们交互的方式没有任何变化,并且在重新启动应用程序以在没有数据库调用的情况下进行设置时更加方便.

或者,我在启动应用程序时创建了一个全局变量。在启动功能内部做这样的事情。

var app = Ext.application({
    name: 'MyApp',
    launch: function() {     
        MyApp.model.User.load('profile', {
            scope: this,
            success: function(user) {
                // Setup the app space under your Application namespace
                // so you don't conflict with anything the the ExtJS framework has set
                MyApp.app.user = user;
            }
        }
    }
}

这样,在整个应用程序中,您将可以通过变量访问当前用户的模型,MyApp.user因此可以在应用程序的所有区域中使用它

var currentUserName = MyApp.app.user.get('name');

这样做的缺点是您正在引入一个全局变量,当它可以避免时,它被认为是不好的做法。

我认为像您建议的那样构建基本控制器没有任何问题,但是如果您这样做纯粹是为了访问要存储的会话变量,我建议这可能有点矫枉过正。

于 2012-10-22T22:13:11.277 回答
0

我几乎总是为这类事情创建一个状态管理器类。您还可以使用自己的自定义代码创建单例类,并将其包含在您的应用程序中,如下所示:

Ext.Loader.setPath('MyApp.Util', 'app/util');

并像这样做一个要求:

Ext.require('MyApp.Util.Class')

类本身应该是这样的:

Ext.define("MyApp.Util.Class", {
  singleton : true,
  options : {},

  myFunction: function(){}
});

这样,您可以将所有非 ExtJS 类的功能放在单独的类中。

于 2012-10-24T09:22:12.243 回答