2012-10-22 4 views
0

어디에서 ExtJS MVC 응용 프로그램에 사용자 별 (세션) 정보를 저장합니까?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"); 
    } 

}); 
+0

나는 당신이 의견을 묻는 것처럼 너무 많이 들렸 기 때문에 질문을 약간 수정했습니다. 나는 아래의 대답을 가지고있다. – Geronimo

+0

@Geronimo 감사합니다! – shatzibtten

답변

0

응용 프로그램 대상에 따라 두 가지 방법이 있습니다.

내가 선호하는 방법은 모델에 LocalStorage 프록시를 사용하여 로컬에 저장하려는 방식입니다. 즉, 응용 프로그램에서 상호 작용하는 방식에 변화가 없으며 응용 프로그램을 다시 실행하여 설정하는 경우에 좀 더 편리합니다. DB 호출없이

또는 응용 프로그램을 시작할 때 전역 변수를 만듭니다. launch 함수 내부에서 이와 같은 작업을 수행하십시오.

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; 
      } 
     } 
    } 
} 

응용 프로그램 전반에 걸쳐 그런 식으로, 당신은 그래서이 다음 응용 프로그램

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

을 이것의 단점의 모든 지역에서 사용할 수있는 변수 MyApp.user을 통해 현재 사용자의 모델에 액세스 할 수 있습니다 피할 수있을 때 나쁜 습관으로 간주되는 전역 변수를 도입한다는 것입니다.

내가 제안한 것처럼 기본 컨트롤러를 구성하는 데 문제가있는 것은 보이지 않지만, 저장하려는 세션 변수에 대한 액세스를 위해이 작업을 수행하는 경우 완전히 과장 될 수 있습니다.

+1

당신의 방법은 내 경우에 더 바람직합니다. 고맙습니다! – shatzibtten

0

.

이렇게 여러 가지 방법으로 어려움을 겪었지만 사용자 권한 데이터가 모두 MVC의 MODEL 컨텍스트에서 가장 적합하다는 것을 알게되었습니다. 그 점을 염두에두고 모든 것을 상점에 넣기로했습니다.

이것은 훌륭하게 작동했습니다. MVC 지침에 따라 상점을 만들면 언제든지 앱의 어느 곳에서나 사용자 세션 데이터를 호출 할 수 있습니다.

4

페이지를 새로 고친 후 데이터를 유지해야하는 경우 Ext.state.Manager를 사용할 수 있습니다.

쿠키 또는 하려면 로컬와

설정 상태 관리자 응용 프로그램 출시 동안 제공 :

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

저는 거의 항상 이런 종류의 일을 위해 State Manager 클래스를 만듭니다.소위처럼 필요

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

그리고 수행 :

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

자체가 이런 식으로 뭔가해야 클래스를 사용자 고유의 사용자 지정 코드로 싱글 톤 클래스를 생성하고 포함을 앱에과 같이 할 수 있습니다 :

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

    myFunction: function(){} 
}); 

그런 식으로 모든 비 ExtJS 기능을 별도의 클래스에 넣을 수 있습니다.

관련 문제