2012-03-27 12 views
16

require.jsとハンドルバーテンプレートを使用したbackbone.jsアプリケーション(私はハンドルバーにAMDモジュールのものを追加しました)を使いこなしています。ちょうどそのテンプレートをあらかじめコンパイルしてお読みください。Requirejsを持つバックボーンのプリコンパイルされたハンドルバーテンプレート?

私はrequirejsでプリコンパイルされたテンプレートをどのように含めるかと思いました。私はコンパイルするためにかなり少数のテンプレート(15以上)を持っているので、それらがすべて同じ出力ファイルになければならないか、一度コンパイルされるべきかどうかはわかりません。また、コンパイルされたテンプレートは、レンダラースクリプトが使用するのと同じHandlebars名前空間を共有しているため、ファイルにテンプレートが必要なときにどうやったらどうなるか分かりません。

アドバイスは素晴らしいでしょう!

答えて

17

単純なアプローチは、既存のテキストに基づいてRequireJSプラグインを作成することです!プラグイン。これによりテンプレートが読み込まれ、コンパイルされます。 RequireJsは、コンパイルされたテンプレートをキャッシュして再利用します。

プラグインコード:main.jsで

// hbtemplate.js plugin for requirejs/text.js 
// it loads and compiles Handlebars templates 
define(['handlebars'], 
function (Handlebars) { 

    var loadResource = function (resourceName, parentRequire, callback, config) { 
     parentRequire([("text!" + resourceName)], 
      function (templateContent) { 
       var template = Handlebars.compile(templateContent); 
       callback(template); 
      } 
     ); 
    }; 

    return { 
     load: loadResource 
    }; 

}); 

設定:backbone.marionetteビューで

require.config({ 
    paths: { 
     handlebars: 'libs/handlebars/handlebars', 
     hb: 'libs/require/hbtemplate', 
    } 
}); 

使用:あなたは偉大なバックボーンを使用する場合は

define(['backbone', 'marionette', 
     'hb!templates/bronnen/bronnen.filter.html', 
     'hb!templates/bronnen/bronnen.layout.html'], 
     function (Backbone, Marionette, FilterTemplate, LayoutTemplate) { 
     ... 

.Marionetteフレームワーク は、デフォルトのレンダラーをオーバーライドして、彼は組み込まれています (ローディング/コンパイル/キャッシングのための)テンプレートローダー:

Marionette.Renderer = { 
    render: function (template, data) { 
     return template(data); 
    } 
}; 
+0

これはいいですが、部分的な部分は処理しませんか? – Leonidas

+1

あなたが登録している限り、なぜそれは動作しないのか分かりません。 –

+4

このテクニックをうまく使いこなしてしまったのですが、パフォーマンスに役立つひねりを加えました。可能であれば、あらかじめコンパイルされたテンプレートを使いたいので、Grunt.jsはすべてのテンプレートをJST []という名前の連想配列にコンパイルし、それぞれの名前をファイルの名前で利用できるようにしました。上記のコードにJSTの存在をチェックし、その配列内の特定のテンプレートをチェックする何かを追加するのは簡単です。存在する場合は、コンパイル済みのテンプレートを返します。それ以外の場合は、図のようにロードしてコンパイルします。その後、自由に変更できる多くのテンプレートを使用して開発し、実行時に事前コンパイルして使用することができます。 –

関連する問題