2015-02-05 51 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(如该链接所示)。但我强烈建议您重新考虑设计。

相关问题