1

こんにちは、sencha touch アプリケーションに keep login を実装する必要があります

以下の私のコードを見てください:

Login.js - ユーザーがログインをクリックすると、「sessionToken」がローカル ストレージに保存されます。その後、メイン ページに移動します。

   onBtnLoginClick: function(){

            var loginviewGetValue =  Ext.getCmp('loginview').getValues();
            var bbid =  Ext.getCmp('bbID').getValue();
            var bbpassword =  Ext.getCmp('bbPassword').getValue();
                var LoginLS =   Ext.getStore('LoginLS');





                                    LoginLS.add({
                                        sessionId: 'sadsadsadasd'
                                       ,deviceId:'1'
                                       ,bb_id :bbid
                                       });

                                       LoginLS.sync();      

                                   var mainForm= Ext.create('bluebutton.view.Main');
                                    Ext.Viewport.setActiveItem(mainForm);

App.js~ 毎回起動関数が localStorage の sessionToken をチェックします。Localstorage が空の場合は、ログイン ページに移動します。それ以外の場合は、メイン ページに移動します

        launch: function() {




        // Destroy the #appLoadingIndicator element
        Ext.fly('appLoadingIndicator').destroy();


        // Initialize the main view

             var LoginLS = Ext.getStore('LoginLS');
             LoginLS.load();

             var record =  LoginLS.getAt(0);


            if(record != undefined){
                var sessionId = record.get('sessionId');
               if (sessionId !=undefined){
                     Ext.Viewport.add(Ext.create('bluebutton.view.Main'));
               }
               else
                   Ext.Viewport.add(Ext.create('bluebutton.view.Login'));

            }
            else{
               Ext.Viewport.add(Ext.create('bluebutton.view.Login'));
               }

//        Ext.create('bluebutton.view.TopMenuList');

    },

Logout.js~Logout は sessionToken をクリアし、再度ログイン ページに移動します

onLogoutClick: function scan() {
                var LoginLS = Ext.getStore('LoginLS');


                     Ext.Viewport.setMasked({
                        xtype: 'loadmask',
                        message: 'Loading...'
                    });



                 LoginLS.load();

                 var record =  LoginLS.getAt(0);
                   LoginLS.removeAll();
                    LoginLS.sync();
                   //Load a new view


//                   Ext.getCmp('tabpanel').destroy();






                var loginForm = Ext.create('bluebutton.view.Login');
                Ext.Viewport.setActiveItem(loginForm);   

                Ext.Viewport.setMasked(false); // hide the load screen

しかし、私は今問題を抱えています。ログインページに戻れません。空白のページに移動します。解決策を教えてください。ありがとう。

ここに私が得るエラーがあります

    [WARN][Ext.data.Batch#runOperation] Your identifier generation strategy for the model does not ensure unique id's. Please use the UUID strategy, or implement your own identifier strategy with the flag isUnique. Console.js:35
[WARN][Ext.Component#constructor] Registering a component with a id (`loginview`) which has already been used. Please ensure the existing component has been destroyed (`Ext.Component#destroy()`. Console.js:35
[WARN][Ext.Component#constructor] Registering a component with a id (`bbID`) which has already been used. Please ensure the existing component has been destroyed (`Ext.Component#destroy()`. Console.js:35
[WARN][Ext.Component#constructor] Registering a component with a id (`bbPassword`) which has already been used. Please ensure the existing component has been destroyed (`Ext.Component#destroy()`. Console.js:35
[WARN][Ext.Component#constructor] Registering a component with a id (`btnLogin`) which has already been used. Please ensure the existing component has been destroyed (`Ext.Component#destroy()`. Console.js:35
[DEPRECATE][bluebutton.view.Login#show] Call show() on a component that doesn't currently belong to any container. Please add it to the the Viewport first, i.e: Ext.Viewport.add(component); 
4

2 に答える 2

3

エラー メッセージを見ると、既存のコンポーネントを破棄せずにログイン パネルを再度作成しようとしていることは明らかです。idアプリケーションで同じものを複数回使用することは許可されていないため、エラーが発生します。

これを回避するには、同じビューを複数回作成しないでください。パフォーマンスにも優れたビューを再利用する必要があります。idもう1つ、 n 要素なしではできない場合にのみ、 n 要素に与える必要があります。

id属性を回避できないと仮定すると、次の 2 つのいずれかを実行する必要があります。

  1. 存在しない場合にのみ新しいビューを作成する

    var loginView = Ext.getCmp("loginview");
    if(!loginView){
        loginView = Ext.create('bluebutton.view.Login');
    }
    
  2. ログイン ビューがビューポートから (非表示/消去) 出たらすぐに、以下を呼び出して破棄します。

    var loginView = Ext.getCmp("loginview");
    loginView.destroy();
    
于 2013-03-12T10:56:25.843 に答える
0

itemIdの代わりにコンポーネントに使用し、idそれに応じてコンポーネントを参照してくださいController。この質問を確認してください: `Id` が存在し、破棄する必要があるという警告

于 2013-03-12T05:47:50.220 に答える