2013-03-27 61 views
0

我正在使用Handlebars模板和Marionette.CompositeView。模板被定義爲:木偶視圖的Handlebars模板在使用前編譯過一次

template : function (serializedData) { 
    var templFn = Handlebars.compile(myTemplateDef); 
    return this.templFn(serializedData); 
} 

與車把傳統的主幹,建議每次我們渲染視圖不編譯模板,而是存放編譯模板作爲視圖屬性,因此它僅被編譯一次從而節省資源:

templFn : Handlebars.compile(myTemplateDef), 

render : function() { 
    var serializedData = this.model.toJSON(); 
    ... 
    this.$el.append(this.templFn(serializedData); 
} 

但在木偶案例模板的情況下()是window,我不控制如何/時模板()被調用。

所以問題是:鑑於我們不想創建一個全球變種window.templFn有沒有辦法將模板編譯與其在使用木偶的情況下分開?

回答

0

有一個車把插件的提線木偶:https://github.com/asciidisco/Backbone.Marionette.Handlebars

這可能不完全是最新的,但你至少應該能夠看到他們是如何處理的模板編譯。

一般來說,Marionette提供了一個Marionette.RendererMarionette.TemplateCache對象,允許一次編譯一次模板,並且只編譯一次,然後從該高速緩存模板編譯中重新渲染。

+0

謝謝,看起來很有希望。我會研究它。 – 2013-03-29 02:55:26

0

我剛開始用木偶工作只有2天前,我用的手把我的代碼牽線木偶(純骨幹)前,然後我用這種方式提線木偶:

template : function(data) { 
    if (typeof this.tplFun === 'undefined') { 
    this.tplFun = Handlebars.compile($('#angry_cat-handlebars').html()); 
    } 
    return this.tplFun(data); 
}; 

,或者你可以再補充tplFun進入你的初始化函數