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({})
包装在括号中,以便它工作。答案已更新。