我尝试使用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时:“TypeError:AppView不是构造函数”。
有人可以帮助我吗?
谢谢
最佳答案
您正在使用循环依赖项-AppView需要LoginView,LoginView需要AppView。当在LoginView中引用时,这导致AppView为null。这里有一个更好的解释:http://requirejs.org/docs/api.html#circular
您可能应该重构设计,使其没有此循环引用。如果发现有必要,则可以在第二个模块(LoginView)中再次使用“require”,并拉入AppView(如该链接所示)。但我强烈建议您重新考虑设计。