0

Marionette.CompositeViewでテンプレート化するハンドルバーを使用しています。テンプレートは次のように定義されます。

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

ハンドルバーを備えた従来のバックボーンでは、ビューをレンダリングするたびにテンプレートをコンパイルするのではなく、コンパイルされたテンプレートをViewプロパティとして保存して、一度だけコンパイルされるようにすることで、リソースを節約することをお勧めします。

templFn : Handlebars.compile(myTemplateDef),

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

しかし、マリオネットの場合、template()のコンテキストはでありwindow、template()が呼び出される方法/タイミングを制御しません。

したがって、問題は次のとおりです。グローバル変数を作成したくないwindow.templFn場合、マリオネットの場合、テンプレートのコンパイルをその使用法から分離する方法はありますか?

4

2 に答える 2

0

マリオネット用のハンドルバープラグインがあります:https ://github.com/asciidisco/Backbone.Marionette.Handlebars

完全に最新ではないかもしれませんが、少なくとも、テンプレートのコンパイルをどのように処理しているかを確認できるはずです。

一般に、Marionetteは、テンプレートを1回だけコンパイルし、キャッシュされたテンプレートのコンパイルから再レンダリングできるようにするオブジェクトを提供Marionette.Rendererします。Marionette.TemplateCache

于 2013-03-27T03:17:26.180 に答える
0

私はちょうど2日前にマリオネットでの作業を開始し、マリオネット(純粋なバックボーン)の前にコードでハンドルバーを使用し、次にマリオネットでこのように使用しました:

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

または、tplFunを初期化関数に追加することもできます

于 2013-03-28T17:13:48.980 に答える