我尝试使用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(如该链接所示)。但我强烈建议您重新考虑设计。

09-11 01:07