我的模型的某些属性应该异步加载(由承诺实现)。我不想等待它——我想现在渲染它,并在承诺得到解决时部分更新它。handlebars.js 支持吗?
问问题
1882 次
2 回答
1
Handlebars 不支持异步。这使得无法将 Promises 用于表达式和助手。您可以使用await
,但这会暂停执行,因此在 Promise 解决之前不会进行渲染。其他模板框架如dust.js 提供异步功能。
于 2016-11-22T09:30:26.970 回答
0
我想我可以提出一个解决方法来让异步(或承诺)(似乎)工作。下面是示例。本质上这就是我正在做的
- 首先返回一个 div
unique Id
(我在这里使用命名空间 + 自动增量) - 进行您的处理(ajax 或任何缓慢的处理)。完成后,通过通过
unique id
下面的代码。观察三重括号 ( {{{ }}}
)。这是为了确保生成的 HTML 不会被转义
<script id="handlebars-demo" type="text/x-handlebars-template">
<div>
-->> {{{functionName "functionParam" }}} <<--
</div>
</script>
<div id="output" />
<script>
window.id=0;
Handlebars.registerHelper('functionName', function(funcParam ){
let tempId = "my_namespace_" + window.id++;
$.post("https://something.com/abc").done(function(data){
$("#"+tempId ).html(data.something);
}
)
return '<div id='+tempId+'>loading</div>'
});
var template = document.getElementById("handlebars-demo").innerHTML;
var templateScript = Handlebars.compile(template);
var context = { };
var html = templateScript(context);
document.getElementById("output").innerHTML= html;
</script>
于 2021-04-30T21:21:49.970 回答