当我的SPA初始化时,它必须进行一些需要在加载任何视图之前运行的ajax调用。我把它们放在shell.js的activate函数中。在其他视图中,我从activate函数返回这些调用,一切正常。但是在shell中我应该从router.activate调用返回。如何返回正确的视图并确保进行那些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'
});
},
答案 0 :(得分:3)
确保返回一个承诺,以便Durandal知道何时允许继续撰写。 沿线的东西应该可以解决问题。
activate: function () {
return $.when(
datacontext.getCurrentUser(),
datacontext.getGroupsAuthorized(),
datacontext.getTeams(),
datacontext.getRoles(),
datacontext.checkPermissions('views.shell')
)
.then(function (s0, s1, s2,s3, s4) {
/* code excluded */
return router.activate('welcome');
}
},
function
和always
需要相应调整。
答案 1 :(得分:0)
仅将router.activate('welcome')片段作为when子句中的另一个承诺就足够了吗?
activate: function () {
var query =
$.when(
datacontext.getCurrentUser(),
datacontext.getGroupsAuthorized(),
datacontext.getTeams(),
datacontext.getRoles(),
datacontext.checkPermissions('views.shell'),
router.activate('welcome');
)
.then(function (s0, s1, s2,s3, s4, s5) {
/* code excluded */
},
function (f0, f1, f2) {
/* code excluded */
}).always( function() {
/* code excluded */
});
return query;
},