我在哪里将用户特定的(会话)信息存储在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");
}
});
最佳答案
我根据应用程序目标采用两种方法。
我的首选方法是对要保存在本地的模型使用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');
这样做的缺点是您要引入一个全局变量,如果可以避免,则认为这是一种不好的做法。
我没有看到像您建议的那样构造基本控制器没有任何问题,但是如果您纯粹是为了访问要存储的会话变量而这样做,那么我认为这可能有点过头了。