Javascript 具有异步数据的handlebar.js帮助程序
我想知道如何使用同步数据和把手助手。我想将cms消息加载到一个单页应用程序,我尝试了以下方法,但无法实现 请参阅下面的代码Javascript 具有异步数据的handlebar.js帮助程序,javascript,handlebars.js,promise,Javascript,Handlebars.js,Promise,我想知道如何使用同步数据和把手助手。我想将cms消息加载到一个单页应用程序,我尝试了以下方法,但无法实现 请参阅下面的代码 function loadCmsMessage(key) { var cms = { "msg.001": "Hello {0} {1}" }; var deferred = $.Deferred(); setTimeout(function () { var
function loadCmsMessage(key) {
var cms = {
"msg.001": "Hello {0} {1}"
};
var deferred = $.Deferred();
setTimeout(function () {
var msg = cms[key];
deferred.resolve(msg);
}, 1000);
return deferred.promise();
}
Handlebars.registerHelper('cms', function (key, arr) {
var promise = loadCmsMessage(key);
promise.done(function (str) {
str = Handlebars.Utils.escapeExpression(str);
if ($.isArray(arr)) {
$.each(arr, function (i) {
var safeStr = Handlebars.Utils.escapeExpression(arr[i]);
str = str.replace("{" + i + "}", safeStr);
});
}
var result = '<span class="cms-data">' + str + '</span>';
return new Handlebars.SafeString(result);
});
});
$(document).ready(function () {
var template = Handlebars.compile($("#myTemplate").html());
$("#wrap").html(template({
"person": ['Jane', 'Fonda']
}));
});
函数加载CMS消息(键){
变量cms={
“msg.001”:“你好{0}{1}”
};
var deferred=$.deferred();
setTimeout(函数(){
var msg=cms[key];
延迟。解决(msg);
}, 1000);
延迟返回。承诺();
}
车把.注册表帮助器('cms',功能(钥匙,arr){
var promise=loadCmsMessage(键);
承诺完成(功能(str){
str=把手.Utils.escapeeexpression(str);
如果($.isArray(arr)){
$。每个(arr,功能(i){
var safeStr=把手.Utils.escapeeexpression(arr[i]);
str=str.replace(“{”+i+“}”,safeStr);
});
}
var结果=''+str+'';
返回新把手。安全字符串(结果);
});
});
$(文档).ready(函数(){
var template=handlebar.compile($(“#myTemplate”).html();
$(“#wrap”).html(模板({
“人”:[‘简’、‘方达’]
}));
});
你不能。return
语句是Promise的内部函数。Handlebar助手不允许异步。Handlebar模板函数生成一个字符串,该字符串在javascript中是不可变的。当内容超出Handlebar的范围时,您应该调用ajax并重新生成模板。一些框架提供了这种功能的方法,比如余烬和angular,我相信我正在主干上使用木偶。