2012-10-22 101 views
0

将用户特定(会话)信息存储在ExtJS MVC应用程序中的位置?在ExtJS MVC应用程序中存储用户信息的正确方法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"); 
    } 

}); 
+0

我稍微修改了你的问题,因为它听起来太像你投票的意见 - 这是在这个SO皱起了眉头。下面我有一个答案。 – Geronimo

+0

@ Geronimo谢谢! – shatzibtten

回答

0

我会根据应用程序目标采取两种方式。

我的首选方法是为我的模型使用LocalStorage代理,我想在本地保存,这样在应用程序中如何与它们交互时不会发生变化,当重新启动应用程序以设置它时,无需DB呼叫。

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

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'); 

这种方法的缺点的各个区域使用访问当前用户的模型是你引入了一个全局变量,当它可以被避免时被认为是不好的做法。

我没有看到像构建基本控制器一样存在任何问题,但是如果您纯粹是为了访问要存储的会话变量而进行操作,我会建议它可能有点矫枉过正。

+1

你的方式在我的情况下更可取。谢谢! – shatzibtten

0

我所做的,涉及用户与特定的权限设置,从他们的会话拉当他们第一次启动应用程序的几个不同的应用程序。

我努力以这种方式做了几种不同的方式,但我认识到用户权限数据在MVC的MODEL上下文中都最适合。考虑到这一点,我决定把它放在商店里。

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

4

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

饼干localStorage的

设置状态管理器应用程序推出期间提供商:

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' 
}); 
0

我几乎总是为这些事情创建一个状态管理器类。你也可以在你的应用程序创建单实例类用自己的自定义代码,包括它像这样:

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

,并做了要求,像这样:

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

本身就应该是这样的类:

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

    myFunction: function(){} 
}); 

这样你就可以把所有的非ExtJS类似的功能放在单独的类中。

相关问题