我尝试使用Backbone创建身份验证应用程序。
我的main.js.应用开始的地方:
require(['backbone', './views/AppView'], function (Backbone, AppView) {
'use strict';
var App = new AppView();
App.render();
);
我之前用requirejs声明了我的libs。 我的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时:“TypeError:AppView不是构造函数”。
有人可以帮助我吗?
谢谢
答案 0 :(得分:5)
您正在使用循环依赖 - AppView需要LoginView,LoginView需要AppView。这导致在LoginView中引用时AppView为null。这里有一个更好的解释:http://requirejs.org/docs/api.html#circular
你应该重构你的设计,不要有这个循环引用。如果您认为有必要,可以使用"要求"再次在第二个模块(LoginView)中拉入AppView(如该链接所示)。但我强烈建议你重新考虑设计。