Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 木偶视图';s车把模板在使用前编译一次_Templates_Backbone.js_Marionette - Fatal编程技术网

Templates 木偶视图';s车把模板在使用前编译一次

Templates 木偶视图';s车把模板在使用前编译一次,templates,backbone.js,marionette,Templates,Backbone.js,Marionette,我在用木偶做把手模板。模板定义为: template : function (serializedData) { var templFn = Handlebars.compile(myTemplateDef); return this.templFn(serializedData); } 在带有把手的传统主干中,建议不要在每次呈现视图时编译模板,而是将编译后的模板存储为视图属性,这样它只编译一次,从而节省资源: templFn : Handlebars.compile(myTe

我在用木偶做把手模板。模板定义为:

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);
}
但是在木偶的情况下,template()的上下文是
window
,我不控制如何/何时调用template()


所以问题是:鉴于我们不想创建一个全局var
窗口。templafn
有没有办法将模板编译与木偶的使用分开?

木偶有一个把手插件:

它可能不是完全最新的,但您至少应该能够看到他们是如何处理模板的编译的


一般来说,木偶网提供了一个
木偶网.Renderer
木偶网.TemplateCache
对象,允许一个模板编译一次,并且只编译一次,然后从缓存的模板编译重新渲染。

我两天前才开始使用木偶网,在木偶网之前我的代码中使用了把手(纯主干),然后我在木偶中使用了这种方式:

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

或者您可以将tplFun添加到初始化函数中

谢谢,看起来很有希望。我会研究一下。