2014-03-04 4 views
0

을 유발하지 않는 기능을 초기화보고 그것을 볼 수 있습니다BackboneJS 내가 백본 응용 프로그램이

/** 
* Event Handler for User 
* 
* date: 21-02-2014 
* version: 0.1 
* 
*/ 
(function($, $$, window, document, utilities){ 

    // Extends my object from Backbone events 
    window.UserHandler = Backbone.View.extend({ 

      events: { 
        'click .login-button': 'login' 
       , 'click .logout-button': 'logout' 
       , 'click .register-button': 'register' 
      } 

     , initialize: function(){ 

       _.bindAll(this, 'login', 'register', 'onLoginComplete', 'onRegisterComplete'); 

       this.collection = new UserList(); 

       this.user = new UserModel(); 

       this.collection.bind('add', this.appendUser); 

       console.log('view is initialized'); 

      } 

     , login: function(e){ 

       alert('hello'); 

       var data = utilities.formToJson('#login-form') 
       , required = [ 'username', 'password' ] 
       , user = new UserModel() 
       , errors = []; 

       // Validate the fields 
       utilities.validateEmptyFields(required, data, errors); 

       if(errors.length > 0){ 

        utilities.showNotification('error', 'Llena todos los campos para ingresar a tu cuenta', 0); 
        return; 
       } 

       // Validate email format 
       if(! utilities.isEmail(data.username)){ 
        utilities.showNotification('error', 'Escribe un email válido.', 0); 
        return; 
       } 

       // shows the progress screen 
       utilities.onProgress('Iniciando Sesión'); 

       user.set(data); 

       user.login(this.onLoginComplete); 

      } 

     , logout: function(){ 
       window.localStorage.removeItem('user'); 
       window.location = 'index.html'; 
      } 

     , onLoginComplete: function(data){ 

       utilities.offProgress(0); 

       if(data.status == 500){ 
        utilities.showNotification('error', data.message, 4000); 
        window.localStorage.removeItem('user'); 
        return; 
       } 

       // create a cookie session to save the user data 
       var model = new UserModel() 
       model.set(data.user); 
       window.localStorage.setItem('user', JSON.stringify(model)); 
       window.location = 'panel-inicio.html'; 

      } 

      /** 
      * Register user 
      * 
      */ 
     , register: function(){ 

       var data = utilities.formToJson('#login-form') 
       , required = [ 'username', 'password' ] 
       , user = new UserModel() 
       , errors = []; 

       // Validate the fields 
       utilities.validateEmptyFields(required, data, errors); 

       if(errors.length > 0){ 

        utilities.showNotification('error', 'Llena todos los campos para crear tu cuenta', 0); 
        return; 
       } 

       // Validate email format 
       if(! utilities.isEmail(data.username)){ 
        utilities.showNotification('error', 'Escribe un email válido.', 0); 
        return; 
       } 

       // shows the progress screen 
       utilities.onProgress('Registrando'); 

       user.set(data); 

       user.register(this.onRegisterComplete); 
      } 

     , onRegisterComplete: function(data){ 

       utilities.offProgress(0); 

       console.log(data); 

       if(data.status == 500){ 
        utilities.showNotification('error', data.message, 4000); 
        window.localStorage.removeItem('user'); 
        return; 
       } 

       this.login(); 

      } 


     , appendUser: function(user){ 
       console.log(user.get('username')); 
      } 

    }); 

})(jQuery, Quo, this, this.document, this.Misc, undefined); 

그래서 초기화 기능이 트리거되지 않습니다! 내가 도대체 ​​뭘 잘못하고있는 겁니까? 내가 전화를 걸거나 잘못된 견해로 의견을 말하고 있습니까? 나는 다른 파일들 Model과 Collection과 그들의 초기화 함수가 완벽하게 작동한다. 당신이 (가) UserHandler "클래스"잘 정의하고

<script type="text/javascript" src="assets/js/jquery-1.11.0.min.js"></script> 
     <script type="text/javascript" src="assets/js/underscore-min.js"></script> 
     <script type="text/javascript" src="assets/js/backbone-min.js"></script> 
     <script type="text/javascript" src="assets/js/misc.js"></script>ç 

     <!-- Backbone API --> 
     <script type="text/javascript" src="assets/js/models/user.js"></script> 
     <script type="text/javascript" src="assets/js/collections/user.js"></script> 
     <script type="text/javascript" src="assets/js/events/user.js"></script> 

답변

0

,하지만 당신은 결코 그것의 인스턴스를 생성하지있어 :

스크립트의 순서

입니다. 대신 유형을 window.UserHandler에 지정하는 것입니다. 시도 :

window.UserHandler = new (Backbone.View.extend({...})); 

더 나은 아직, UserHandler을 정의한 후보기를 인스턴스화 :

var UserHandlerView = Backbone.View.extend.... 
var view = new UserHandlerView(); 

일관된 일을 유지하기 위해, 대부분의 사람들은 당신이 인스턴스에 newlowerCamelCase를 호출 할 수 있습니다 (유형 CapitalCamelCase 물건을 사용, 원시 등

+0

덕분에, 나는 당신의 솔루션을 시도 할 것이다. 그러나, 나는 당신처럼 내가보기를 인스턴스화했다 ...하지만 난 거 변경을 기억합니다. :) – Brian

+0

난 그냥 아마 당신을 실현 @ 브라이언 'Backbone.View.extend ({}) '를 괄호 안에 감싸서 작동시켜야합니다. 답변이 업데이트되었습니다. – redmallard

관련 문제