2015-02-05 3 views
2

백본으로 인증 앱을 만들려고합니다.백본 오류보기가 생성자가 아닙니다.

내 main.js. 앱 시작 위치 :

require(['backbone', './views/AppView'], function (Backbone, AppView) { 
    'use strict'; 

    var App = new AppView(); 
    App.render(); 
); 

requirejs를 사용하여 이전에 내 라이브러리를 선언했습니다. 내 AppView.js : 사용자가 연결되어있는 경우

define (['backbone', 'Login', './home/HomeView', './login/LoginView'], function (Backbone, Login, HomeView, LoginView) { 
'use strict'; 

var AppView = Backbone.View.extend({ 

    el : 'body', 

    initialize : function() { 
     console.log('init Appview'); 
     if (Login.isConnected()) { 
      //Utilisateur connecté 
      this.view = new HomeView(); 
     } 
     else{ 
      //Utilisateur pas connecté 
      this.view = new LoginView(); 
     } 
    }, 

    render : function() { 
     this.$el.html(this.view.render().$el); 
     return this; 
    } 
}); 
return AppView; 
}); 

여기에 내가 확인. 그가있는 경우 : AppView, 그렇지 않은 경우 : LoginView. 모든 것이 잘 작동하고 LoginView가 나타납니다.

LoginView : "형식 오류가 : 앱 조회 생성자 아니다"

define(['backbone', 'underscore', 'jquery', 'requirejs-tpl!./../../../../resources/templates/login/LoginTemplate.html', 'Login', './../AppView'], function (Backbone, _, $, LoginTemplate, Login, AppView) { 

'use strict'; 

var LoginView = Backbone.View.extend({ 

    initialize : function() { 

    }, 

    render : function() { 
     this.$el.html(LoginTemplate()); 
     return this; 
    }, 

    events : { 
     'click #btnConnect' : 'connect' 
    }, 

    connect : function (event) { 

     event.preventDefault(); 

     var login = $('#login').val(); 
     var password = $('#password').val(); 
     var ReponseLogin = Login.login(login, password); 
     if(!ReponseLogin.connected){ 
      //Erreur 
      $('#showErreur').html(ReponseLogin.erreur); 
     } 
     else{ 
      //Pas d'erreur, on affiche l'appli, AppView 
      var App = new AppView(); 
      App.render(); 
     } 
    } 
}); 

return LoginView; 

}); 

내가 HomeView에 다시로드 될 새로운 앱 조회를 선언하려고

.

누군가 나를 도와 줄 수 있습니까?

당신은 순환 종속성을 사용하는

답변

5

감사합니다 - 앱 조회가 LoginView이 필요 LoginView는 앱 조회가 필요합니다. 이로 인해 LoginView 내에서 참조 될 때 AppView가 null이됩니다. 이에 대한 더 나은 설명이 여기에 있습니다. http://requirejs.org/docs/api.html#circular

아마도이 순환 참조가 없도록 디자인을 리팩터링해야합니다. 필요한 경우 두 번째 모듈 (LoginView)에서 "require"를 다시 사용하고 AppView를 끌어다 놓을 수 있습니다 (해당 링크 참조). 그러나 나는 당신이 디자인을 다시 생각해 보길 강력히 권합니다.

관련 문제