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 を使用できます。

アプリケーションの起動時にCookieまたは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'
});
于 2012-10-22T22:08:29.683 に答える
0

私は、ユーザーが最初にアプリを起動したときにセッションからプルされた特定のアクセス許可設定を持つユーザーが関与するいくつかの異なるアプリを作成しました。

私はこれをいくつかの異なる方法で行うのに苦労しましたが、ユーザー権限データはすべてMVCのMODELコンテキストに最適であることがわかりました。それを念頭に置いて、私はそれをすべて店に置くことにしました。

これはうまくいきました。MVCガイドラインに従ってストアを作成すると、アプリ内のどこからでもユーザーセッションデータをいつでも呼び出すことができます。Ext.getStore('SessionStoreId')

于 2012-10-22T21:24:04.033 に答える
0

私はほとんどの場合、この種のもののために State Manager クラスを作成します。独自のカスタム コードを使用してシングルトン クラスを作成し、次のようにアプリに含めることもできます。

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

そして、require を次のように実行します。

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

クラス自体は次のようになります。

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

  myFunction: function(){}
});

そうすれば、ExtJS に似ていないすべての機能を別のクラスに入れることができます。

于 2012-10-24T09:22:12.243 に答える
0

アプリケーションのターゲットに応じて、2 つの方法で行います。

私の好みの方法は、ローカルに保存したいモデルに 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');

これの欠点は、回避できる場合に悪い習慣と見なされるグローバル変数を導入していることです。

あなたが提案したようにベースコントローラーを構築することに問題があるとは思いませんが、保存したいセッション変数に純粋にアクセスするためにそれを行っている場合は、少しやり過ぎだと思います。

于 2012-10-22T22:13:11.277 に答える