2013-02-02 59 views
9

是否有一種乾淨的方式來定義/運行回調函數Mustache.js已經完成了渲染模板並將其插入到DOM中?例如,像這樣:如何在Mustache.js完成渲染模板時運行回調

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

我已經能夠拿出計數將被插入到DOM在我看來模型的節點數量,然後使用setInterval的檢查最好DOM中存在許多節點。一旦他們這樣做,我就可以調用我想要的功能。這對我來說似乎效率低下並且可能有問題,但我不知道還有什麼要做。

回答

0

如果您還使用jQuery你可以使用:

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

Mustache.js具有流模板結果的能力。這在項目文件中有描述,但是是removed recently。我不確定這是否是有意的,但它似乎仍然有效。這描述了每次渲染模板塊時調用的Mustache.to_html函數的可選回調參數。也許這可以幫助你解決問題。

+0

你不能使用'$(selector).ready(...'。這隻適用於DOM初始化。 – andlrc

+0

你是對的,這隻會第一次渲染元素。 –

+0

不,這隻會告訴DOM準備就緒。不是別的。 – andlrc

3

與鬍子無關,實際上它是關於jQuery .html()。

$( 'your_div')HTML(渲染).promise()來實現(函數(){

// do your stuff 

})。

+1

什麼是渲染變量?這沒有定義。 –

+1

@MartinBurch我認爲它是'Mustache.render(...)' –

+0

@MartinBurch使用這個'var rendered =「

test
」;'在示例之前。 – Jessycormier

2

您不需要回調mustache.js的render()函數,因爲它是同步的。 jquery的.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!"); 
}); 
+0

如果您在等待Mustache.render中的內容完成渲染並且回調在完成之前運行,該怎麼辦? – Jessycormier

+1

@Jessycormier就像我在我的回答中提到的 - 'Mustache.render()'是同步的 - 所以這不會發生。 –

+0

我很抱歉沒有清楚地閱讀你的答案:)謝謝你的提示! – Jessycormier

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/