我需要加载部分html模板,就在我从templateHelper获取使用ajax的结果之后。
在我的ItemView
代码中:
templateHelpers: {
currentUserCan: function(action) {
$.when( currentUser.can(action) ).done(function(permission){
return permission;
});
}
}
can
功能:
can: function( action ){
var defer = $.Deferred(),
params = { .... }
$.get( config[ 'api' ] , params)
.done(function(response) {
defer.resolve(response['permission'])
})
.fail(function(response){
defer.resolve(false)
});
return defer.promise();
}
我的模板:
<div class="large-8 columns">
<p><% if (currentUserCan('some_action')) { do something, console.log("can") } else { console.log('can not')}%></p>
<p>Last Status:<%= date %></p>
</div>
<div class="large-8 columns">
...
...
由于异步ajax,我得到了未定义的结果,并且'不能'在控制台,虽然它是真的。
如何在if
语句中加载我的代码,只有在完成ajax之后?
答案 0 :(得分:1)
不要尝试以“同步方式”使用异步代码。
也许,这对你来说是一个很好的解决方案:
templateHelpers: {
currentUserCan: function(action) { return currentUser.can(action); }
}
<div class="large-8 columns">
<p><% $.when(currentUserCan('some_action')).done(function(permission) {
if(permission)
console.log("can");
else
console.log('can not');
}) %></p>
<p>Last Status:<%= date %></p>
</div>