当我的SPA初始化时,必须在加载任何视图之前进行一些需要运行的ajax调用。我已经将这些放在shell.js的activate函数中。在其他视图中,我从activate函数返回这些调用,并且所有工作都正常。但在shell中,我应该从router.activate调用返回。如何返回正确的视图,并确保这些ajax调用?我所看到的是数据并不总是加载。Durandal:如何在shell激活函数中正确创建ajax请求
activate: function() {
var query =
$.when(
datacontext.getCurrentUser(),
datacontext.getGroupsAuthorized(),
datacontext.getTeams(),
datacontext.getRoles(),
datacontext.checkPermissions('views.shell')
)
.then(function (s0, s1, s2,s3, s4) {
/* code excluded */
},
function (f0, f1, f2) {
/* code excluded */
}).always(function() {
/* code excluded */
});
return router.activate('welcome');
},
所有的datacontext通话是这个样子:
getCurrentUser = function() {
return $.ajax({
url: 'api/currentuser/',
type: 'GET'
});
},
尽管您可以同时向客户端发送很多ajax请求,但我认为它的可扩展性不好。服务器上的会话可以一次访问一个请求,剩余的请求进入队列。当多个用户尝试启动此视图时,同时由于限制可伸缩性,您的服务器将因过多的排队请求而过载。还有一点需要记住的是,如果你对这些请求进行了authortizing/authenticating代码,每个请求都会一遍又一遍地执行,从而增加了正在执行的代码的复制。 – Yogesh