Backbone Error视图不是构造函数

时间:2015-02-05 15:06:06

标签: javascript backbone.js view login constructor

我尝试使用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不是构造函数”。

有人可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:5)

您正在使用循环依赖 - AppView需要LoginView,LoginView需要AppView。这导致在LoginView中引用时AppView为null。这里有一个更好的解释:http://requirejs.org/docs/api.html#circular

你应该重构你的设计,不要有这个循环引用。如果您认为有必要,可以使用"要求"再次在第二个模块(LoginView)中拉入AppView(如该链接所示)。但我强烈建议你重新考虑设计。