2015-02-05 74 views
2

我嘗試使用Backbone進行身份驗證應用程序。骨幹錯誤視圖不是構造函數

我的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被重新加載新APPVIEW: 「類型錯誤:APPVIEW是不是構造」。

有人能幫助我嗎?

謝謝

回答

5

您正在使用循環依賴--AppView需要LoginView,LoginView需要AppView。這會導致在LoginView中引用AppView時爲空。有這個在這裏一個更好的解釋:http://requirejs.org/docs/api.html#circular

你或許應該重構你的設計沒有這個循環引用。如果您覺得有必要,您可以在第二個模塊(LoginView)中再次使用「require」,然後拉入AppView(如該鏈接所示)。但我強烈建議您重新考慮設計。

相關問題