2

我的模型的某些属性应该异步加载(由承诺实现)。我不想等待它——我想现在渲染它,并在承诺得到解决时部分更新它。handlebars.js 支持吗?

4

2 回答 2

1

Handlebars 不支持异步。这使得无法将 Promises 用于表达式和助手。您可以使用await,但这会暂停执行,因此在 Promise 解决之前不会进行渲染。其他模板框架如dust.js 提供异步功能。

于 2016-11-22T09:30:26.970 回答
0

我想我可以提出一个解决方法来让异步(或承诺)(似乎)工作。下面是示例。本质上这就是我正在做的

  1. 首先返回一个 div unique Id(我在这里使用命名空间 + 自动增量)
  2. 进行您的处理(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 回答