如何在Mustache.js完成渲染模板时运行回调

时间:2013-02-02 21:10:15

标签: javascript jquery mustache

一旦Mustache.js完成渲染模板并将其插入DOM,是否有一种干净的方法来定义/运行回调函数?例如,像这样:

Mustache.render(template, viewModel, function() {...});

我能想到的最好的方法是计算我的视图模型中将插入DOM的节点数,然后使用setInterval检查DOM中是否存在多个节点。一旦他们这样做,我就可以调用我想要的功能。这似乎效率低下,可能对我有些麻烦,但我不知道还能做什么。

4 个答案:

答案 0 :(得分:4)

与胡子无关,实际上是关于jQuery .html()。

$('。your_div')。html(render).promise()。done(function(){

// do your stuff

});

答案 1 :(得分:2)

你不需要回复mustache.js' render()函数,因为它是同步的。 jquery' s .html()也是同步的。

如果您确实需要回调(无论出于何种原因),您可以自己编写代码:

var myrender = function(template, viewModel, callback)
{
    Mustache.render(template, viewModel);
    if(typeof callback === "function")
        callback();
}

// usage:
myrender(my_template, my_viewModel, function(){
    alert("I can do anything here!");
});

答案 2 :(得分:0)

如果你也在使用jQuery,你可以使用:

$("#element").ready(function() {
  // do something when Mustache.js has finished rendering
});

<击>

Mustache.js能够传输模板结果。这在项目文档中有描述,但是removed recently。我不确定这是否是故意的,但似乎仍然有效。这描述了Mustache.to_html函数的可选回调参数,每次渲染模板块时都会调用该参数。也许这可以帮助你解决问题。

答案 3 :(得分:0)

您可以使用以下内容:

displayData: function () {
    app.renderTemplate("test", app.data, function (returnValue) {
        $('.result').append(returnValue);
    });

},


renderTemplate: function (templatefile, data, callback) {
    var tpl = 'views/' + templatefile + '.mst';
    $.ajax(tpl,
        {
            dataType: "text",
            success: function (template) {
                var rendered = Mustache.render(template, data);
                callback(rendered);
            }
        });
}

详细的操作方法可以在这里找到: https://www.chaensel.de/mustache-js-return-rendered-result-to-callback-function/