2013-03-27 62 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进入你的初始化函数