你好我是backbonejs的新手,
我创建了一个函数来验证会话,并在调用此函数时通过我的路由使用if和else语句
var validateSession = function(){
var session = new sessionCollection();
session.fetch( {
success : function(){
return true;
},
error : function(){
CarRentalApp.trigger('admin:login');
return false;
}
} );
};
问题是“返回”声明对我不起作用。它不是返回true或false,而是返回undefined。我错过了什么吗?
答案 0 :(得分:2)
您也可以使用$.Deferred()
var validateSession = function(){
var defer = $.Deferred();
var session = new sessionCollection();
session.fetch( {
success : function(){
defer.resolve(true);
},
error : function(){
defer.resolve(false);
}
});
return defer.promise();
};
然后:
$.when(validateSession()).done(function(result){
});
答案 1 :(得分:1)
我认为这是一个javascript问题,而不是骨干。 Backbone.Collection.fetch方法是一种异步方法,这意味着如果你这样做:
validateSession();
该函数将调用session.fetch()然后立即返回,它不会等待fetch()方法完成它的工作。你没有在validateSession函数中有return语句,所以它只是返回你未定义的。并且当fetch()方法完成时,您不会收到任何通知。
如果你想获得session.fetch()的结果,我认为你最好在成功和错误两种情况下触发事件:
var validateSession = function(){
var session = new sessionCollection();
session.fetch( {
success : function(){
CarRentalApp.trigger('valid:true');
},
error : function(){
CarRentalApp.trigger('valid:false');
}
} );
};
然后听取这两个事件并分别进行一些处理。
希望这可以提供帮助。