Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vadio

[Resolvido] erro js

Recommended Posts

olá pessoal.

to criando um sistema de login com ajax aqui

 

funciona de boa.. mas se eu logar, deslogar e em seguida logar ou deslogar, logar e deslogar

 

na 3 ação nada a contece....

 

é assim o index inicia e chama a rota check q vai fazer a verificação se usuario online ou offline

se usuario online mostrar painel

se usuario offline mostrar formulario

 

é engraçado pq funciona na boa mas qd ele tenta monta ou o form ou o painel na segunda vez ele simplesmente não cria

 

 

abaixo tão meus arquivos

login - objeto login

loginBase - é extendido pelo login possui funções de ajax

loginController - e oq vai fazer o controle das ações

loginView - responsavel por monta a view

loginForm - cria form

loginPanel - cria painel

 

 

index.html

       // Require dependencies
       require([
           "dojo/ready",
           "dojo/dom",
           "dojo/router",

           "dojo/My/RedesSociais",
           "dojo/My/Menu",
           "dojo/My/About",
           "dojo/My/Login/Login",
           "dojo/My/Album/Album",
           "dojo/My/Login/LoginController"
       ], function(ready, dom, router,
                   RedesSociais, Menu, About, Login, Album, LoginController){

           ready(function(){
               var redesSociais = new RedesSociais();
               redesSociais.createThumbs();

               var menu = new Menu({},'main_menu');
               menu.startup();

               var loginController = new LoginController();
               loginController.checkLogin();

               router.register("/", function(evt){
               });

               router.register("/check", function(evt){
                   var loginController = new LoginController();
                   loginController.checkLogin();
               });
               router.register("/logout", function(evt){
                   var loginController = new LoginController();
                   loginController.logout();
               });

               router.register("/album", function(evt){
                   var album = new Album();
                   album.findAll();
               });
               router.register("/sobre", function(evt){
                   var about = new About({},'content');
               });
               router.register("/membros", function(evt){
               });

               router.register("/contato", function(evt){
               });
               router.startup();

               var hash = window.location.hash === '' ? "/check" : window.location.hash.replace("#","");
               router.go(hash);
           });
       });

 

 

loginController

define([
   "dojo/_base/declare",
   "dojo/_base/lang",

   "dojo/router",

   "dojo/My/Login/Login",
   "dojo/My/Login/LoginView"

], function(declare, lang,
           router,
           Login, LoginView
   ){
   return declare(null, {
       login:{},
       constructor: function(){
       },
       logout:function(){
           var login = new Login();
           var xhr = login.logout();
           xhr.then(function(){
               router.go('/check');
           });

       },
       checkLogin:function(){
           var login = new Login();
           var xhr = login.checkLogin();
           xhr.then(function(data){
               data = data.charAt(0) === "t";

               //render view
               var view = new LoginView();
               if(data) view.createPanel();
               else view.createForm();

               router.go('/');
           });

       }
   });
});

login

define([
   "dojo/_base/declare",
   "dojo/_base/lang",
   "dojo/My/Login/LoginBase"
], function(declare, lang,
           LoginBase
){
   return declare(LoginBase, {
       constructor: function(/*Object*/ kwArgs, /*String::id*/ srcNodeRef){
           lang.mixin(this, kwArgs);
           //this.srcNodeRef = srcNodeRef === undefined ? this.srcNodeRef : srcNodeRef;
       }
   });
});

loginbase

define([
   "../../_base/declare",
   "dojo/_base/lang",
   "dojo/_base/xhr",
   "dojo/My/Error",
   "dojo/My/Standby"
], function(declare, lang, xhr, Error, Standby){
   return declare(null, {
       constructor: function(/*Object*/ kwArgs){
           lang.mixin(this, kwArgs);
       },
       generateStandBy:function(){
           var standby = new Standby ('login_widget');
           standby = standby.get();
           return standby;
       },
       checkLogin:function(){
           var standby = this.generateStandBy();
           standby.show();
           var request = xhr.get({
               url: "/verificalogado",
               handleAs: 'text',
               error: function(err){
                   new Error(err);
               },
               handle:function(e){
                   standby.hide();
                   standby.destroy();
               }
           });
           return request;
       },
       getForm:function(){
           var standby = this.generateStandBy();
           standby.show();
           var request = xhr.get({
               url: "/login",
               error: function(err){
                   new Error(err);
               },
               handle:function(e){
                   standby.hide();
                   standby.destroy();
               }
           });
           return request;
       },
       doLogin:function(form){
           var standby = this.generateStandBy();
           standby.show();
           var request = xhr.post({
               url: "/login_check",
               form: form,
               error: function(err){
                   new Error(err);
               },
               handle:function(e){
                   standby.hide();
                   standby.destroy();
               }
           });
           return request;
       },

       logout:function(){
           var standby = this.generateStandBy();
           standby.show();
           var request = xhr.get({
               url: "/logout",
               error: function(err){
                   new Error(err);
               },
               handle:function(e){
                   standby.hide();
                   standby.destroy();
               }
           });
           return request;
       }
   });
});

 

loginView

define([
   "dojo/_base/declare",
   "dojo/_base/lang",

   "dojo/router",

   "dojo/dom",
   "dojo/dom-construct",

   "dojo/My/Login/Login",
   "dojo/My/Login/LoginForm",
   "dojo/My/Login/LoginPanel",

], function(declare, lang,
           router,
           dom, domConstruct,
           Login, LoginForm, LoginPanel
   ){
   return declare(null, {
       srcNodeRef: 'login_widget',
       constructor: function(/*Object*/ kwArgs, /*String::id*/ srcNodeRef){
           lang.mixin(this, kwArgs);
           this.srcNodeRef = srcNodeRef === undefined ? this.srcNodeRef : srcNodeRef;
       },
       getClearedContent:function(){
           var content = dom.byId(this.srcNodeRef);
           content.innerHTML = '';
           return content;
       },

       createPanel: function(){
           var content = this.getClearedContent();
           var div = domConstruct.create('div',null,content);
           div.setAttribute('id','dropDownButtonContainer');

           var panel = new LoginPanel();
           panel.startup();
       },

       createForm: function(){
           var appendTo = this.getClearedContent();
           var login = new Login();
           var formHtml = login.getForm();
           formHtml.then(function(data){
               appendTo.innerHTML = data;
               var formDojo = new LoginForm();
               formDojo = formDojo.getContainer();
               formDojo.startup();
               formDojo.set('onSubmit',function(e){
                   dojo.stopEvent(e);
                   if(this.validate()){
                       var r = login.doLogin('login_form');
                       r.then(function(data){
                           if(data.error !== undefined){
                               alert(data.error);
                           }else {

                               router.go('/check');
                               this.destroy();
                           }
                       })
                   }
               });

           });
       }
   });
});

 

loginPanel

define([
   "dojo/_base/declare",
   "dojo/_base/lang",
   "dojo/dom",
   "dojo/router",
   "dijit/form/DropDownButton",
   "dijit/DropDownMenu",
   "dijit/MenuItem"
], function(declare, lang, dom, router,DropDownButton, DropDownMenu, MenuItem){
   return declare(null, {
       srcNodeRef: 'login_widget',
       constructor: function(/*Object*/ kwArgs){
           lang.mixin(this, kwArgs);
       },

       startup: function(){

           var menu = new DropDownMenu({ style: "display: none;"});

           var menuItem1 = new MenuItem({
               label: "Configuração",
               onClick: function(){
                   router.go('/profile/edit');
               }
           });
           menu.addChild(menuItem1);

           var menuItem2 = new MenuItem({
               label: "Sair",
               onClick: function(){
                   router.go('/logout');
                   menu.destroy();
               }
           });
           menu.addChild(menuItem2);

           var button = new DropDownButton({
               label: "Profile!",
               name: "profile",
               dropDown: menu,
               id: "profile_dropdown_menu"
           });
           var append =  dom.byId("dropDownButtonContainer");
           console.debug(append);
           append.appendChild(button.domNode);

       }

   });
});

 

loginform

define([
   "dojo/_base/declare",
   "dojo/_base/lang",

   "dijit/form/Form",
   "dijit/form/ValidationTextBox",
   "dijit/form/Button"
], function(declare, lang,
   Form, ValidationTextBox, Button){
   return declare(null, {
       loginForm: {},
       constructor: function(){
           this.loginForm = new Form({},'login_form');

           var username = new ValidationTextBox({
               name: '_username',
               required: true,
               placeHolder: 'Username / Email',
               style: 'width: 150px;',
               type: 'text'
           },'username');

           var password = new ValidationTextBox({
               name: '_password',
               required: true,
               placeHolder: 'Password',
               style: 'width: 150px;',
               type: 'password'
           },'password');

           var submit = new Button({
               label:'ok',
               type:'submit'
           },'_submit');

       },
       getContainer:function(){
           return this.loginForm;
       }
   });
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui..

 

como já havia criado o objeto tive q destrui-lo caso já existisse..

 

 

só foi preciso alterar um arquivo

buscar o id do widget já gerado e se existir destrui-lo e recria-lo

define([
   "dojo/_base/declare",
   "dojo/_base/lang",

   "dojo/router",

   "dijit/registry",
   "dojo/dom",
   "dojo/dom-construct",

   "dojo/My/Login/Login",
   "dojo/My/Login/LoginForm",
   "dojo/My/Login/LoginPanel",

], function(declare, lang,
           router,
           registry, dom, domConstruct,
           Login, LoginForm, LoginPanel
   ){
   return declare(null, {
       srcNodeRef: 'login_widget',
       constructor: function(/*Object*/ kwArgs, /*String::id*/ srcNodeRef){
           lang.mixin(this, kwArgs);
           this.srcNodeRef = srcNodeRef === undefined ? this.srcNodeRef : srcNodeRef;
       },
       getClearedContent:function(){
           var content = dom.byId(this.srcNodeRef);
           content.innerHTML = '';
           return content;
       },

       createPanel: function(){

           var widget  = registry.byId('profile_dropdown_menu');
           if(widget !== undefined) widget.destroy();

           var content = this.getClearedContent();
           var div = domConstruct.create('div',null,content);
           div.setAttribute('id','dropDownButtonContainer');

           var panel = new LoginPanel();
           panel.startup();
       },

       createForm: function(){

           var widget  = registry.byId('login_form');
           if(widget !== undefined) widget.destroy();

           var appendTo = this.getClearedContent();
           var login = new Login();
           var formHtml = login.getForm();
           formHtml.then(function(data){
               appendTo.innerHTML = data;
               var formDojo = new LoginForm();
               formDojo = formDojo.getContainer();
               formDojo.set('onSubmit',function(e){
                   dojo.stopEvent(e);
                   if(this.validate()){
                       var r = login.doLogin('login_form');
                       r.then(function(data){
                           if(data.error !== undefined){
                               alert(data.error);
                           }else {
                               router.go('/check');
                           }
                       })
                   }
               });

           });
       }
   });
});

 

gostaria que postassem sobre meu codigo e se tem alguma forma melhor de se fazer isso..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.