Javascript BackboneJS视图初始化函数不是触发器

Javascript BackboneJS视图初始化函数不是触发器,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我有一个主干应用程序,它有一个视图: /** * Event Handler for User * * date: 21-02-2014 * version: 0.1 * */ ( function( $, $$, window, document, utilities ){ // Extends my object from Backbone events window.UserHandler = Backbone.View.extend({ eve

我有一个主干应用程序,它有一个视图:

/**
* Event Handler for User
*
* date: 21-02-2014
* version: 0.1
*
*/
( function( $, $$, window, document, utilities ){

    // Extends my object from Backbone events
    window.UserHandler = Backbone.View.extend({

            events: {
                    'click .login-button': 'login'
                ,   'click .logout-button': 'logout'
                ,   'click .register-button': 'register'
            }

        ,   initialize: function(){

                _.bindAll(this, 'login', 'register', 'onLoginComplete', 'onRegisterComplete' );

                this.collection = new UserList();

                this.user = new UserModel();

                this.collection.bind('add', this.appendUser);

                console.log('view is initialized');

            }

        ,   login: function( e ){

                alert( 'hello' );

                var data = utilities.formToJson( '#login-form' )
                ,   required = [ 'username', 'password' ]
                ,   user = new UserModel()
                ,   errors = [];

                // Validate the fields
                utilities.validateEmptyFields( required, data, errors );

                if( errors.length > 0 ){

                    utilities.showNotification( 'error', 'Llena todos los campos para ingresar a tu cuenta', 0 );
                    return;
                }

                // Validate email format
                if( ! utilities.isEmail( data.username ) ){
                    utilities.showNotification( 'error', 'Escribe un email válido.', 0 );
                    return;
                }

                // shows the progress screen
                utilities.onProgress( 'Iniciando Sesión' );

                user.set( data );

                user.login( this.onLoginComplete );

            }

        ,   logout: function(){
                window.localStorage.removeItem( 'user' );
                window.location = 'index.html';
            }

        ,   onLoginComplete: function( data ){

                utilities.offProgress( 0 );

                if( data.status == 500 ){
                    utilities.showNotification( 'error', data.message, 4000 );
                    window.localStorage.removeItem( 'user' );
                    return;
                }

                // create a cookie session to save the user data
                var model = new UserModel()
                model.set( data.user );
                window.localStorage.setItem( 'user', JSON.stringify( model ) );
                window.location = 'panel-inicio.html';

            }

            /**
            * Register user
            *
            */
        ,   register: function(){

                var data = utilities.formToJson( '#login-form' )
                ,   required = [ 'username', 'password' ]
                ,   user = new UserModel()
                ,   errors = [];

                // Validate the fields
                utilities.validateEmptyFields( required, data, errors );

                if( errors.length > 0 ){

                    utilities.showNotification( 'error', 'Llena todos los campos para crear tu cuenta', 0 );
                    return;
                }

                // Validate email format
                if( ! utilities.isEmail( data.username ) ){
                    utilities.showNotification( 'error', 'Escribe un email válido.', 0 );
                    return;
                }

                // shows the progress screen
                utilities.onProgress( 'Registrando' );

                user.set( data );

                user.register( this.onRegisterComplete );
            }

        ,   onRegisterComplete: function( data ){

                utilities.offProgress( 0 );

                console.log(data);

                if( data.status == 500 ){
                    utilities.showNotification( 'error', data.message, 4000 );
                    window.localStorage.removeItem( 'user' );
                    return;
                }

                this.login();

            }


        ,   appendUser: function( user ){
                console.log( user.get( 'username' ) );
            }

    });

})( jQuery, Quo, this, this.document, this.Misc, undefined );
所以初始化函数永远不会被触发!!我做错了什么?我是否以错误的方式调用或写入视图?我有其他的文件模型和集合,它们的初始化函数工作得很好

脚本的顺序为:

<script type="text/javascript" src="assets/js/jquery-1.11.0.min.js"></script>
        <script type="text/javascript" src="assets/js/underscore-min.js"></script>
        <script type="text/javascript" src="assets/js/backbone-min.js"></script>
        <script type="text/javascript" src="assets/js/misc.js"></script>ç

        <!-- Backbone API -->
        <script type="text/javascript" src="assets/js/models/user.js"></script>
        <script type="text/javascript" src="assets/js/collections/user.js"></script>
        <script type="text/javascript" src="assets/js/events/user.js"></script>

ç

您定义的
UserHandler
类很好,但从未创建过它的实例。相反,您只是将类型分配给
window.UserHandler
。尝试:

window.UserHandler = new (Backbone.View.extend({...}));
更好的是,在定义
UserHandler
之后实例化视图:

var UserHandlerView = Backbone.View.extend....
var view = new UserHandlerView();

为了保持一致性,大多数人对类型使用
CapitalCamelCase
(您可以调用
new
打开,对实例、原语等调用
lowerCamelCase

谢谢,我会尝试您的解决方案。不过,我记得我和您一样实例化了视图……但我会做出更改。:)@Brian我刚刚意识到您可能需要将
Backbone.View.extend({})
包装在括号中,以便它工作。答案已更新。