2012-10-22 142 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類似的功能放在單獨的類中。

相關問題