簡體   English   中英

使用Handlebars.js預加載模板

[英]Preloading templates with Handlebars.js

我制作了一個小應用程序,其中顯示了base64編碼的圖像以及下面的一些文本。 我將iScroll用於滾動,將Handlebars.js用於屏幕模板。

我的問題是,有時調用iScroll.refresh()方法為時過早,無法計算正確的尺寸。

app.dataInterface.getContents(self.gameid, self.state, function(contents){
    self.currentContents = contents;
    for (i=0; i<contents.length; i++) {
        $(IngameView.cimgtemplate(contents[i])).hide().appendTo(".content").fadeIn();
    }
    self.setScroll();
    });

車把模板:

<script id="content-img-tpl" type="text/x-handlebars-template">
        <div class="contents content_img" id="{{content_id}}">
            <img class="image" src="{{src}}"/>
            {{txt}}
        </div>
</script>

我不太確定把手是否可以同步工作,但是由於它在圖像數據較小時可以工作,因此我認為圖像加載(解碼)速度太慢可能是一個問題。

是否有任何方法可以在將Handlebars.js模板附加到DOM之前預加載它們,或者在執行Handlebars-helpers和加載圖像后進行某種回調以刷新?

提前致謝 ;)

我不知道您如何編譯您的Handlebars模板,但這是我通過將通用模板編譯功能與自定義json請求結合使用來解決此問題的方法:

function initTemplate(jsonWS, templateName, callback){
$.ajax({
    url: jsonWS,
    dataType: 'json',
    data: { 'field-action': 'select', 'jquery-list': templateName },
    success: function(data){
        var templateScript = $('#' + templateName).html();
        var template = Handlebars.compile(templateScript); 
        $('.' + templateName).html(template(data)); 
    },
    complete: function(){
        if(callback != null) callback();
    },
    error: function(data){
        notify(data.responseText);
    }
});
}

如果要確保在播放數據之前已加載數據,請傳遞一個回調函數,該函數僅在模板完全渲染后才被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM