2013-08-14 10 views
7

私はHandlebarsテンプレートをプリコンパイルしたいのですが、これは開発モードでどのように動作するのか分かりません。RequireJSでハンドルバーにプリコンパイルされたテンプレートを使用するには?

Handlebarsテンプレートファイルの変更を常に監視するために、Guardのようなバックグラウンドプロセスを実行するのが一般的ですか?

テンプレートをプルインするためにRequireJSを使用しています。例えば:

define(['jquery', 'handlebars', 'text!templates/my_template'], function($, Handlebars, myTemplate) { 

    // ... 

    var data = {"some": "data", "some_more": "data"}; 
    var templateFn = Handlebars.compile(myTemplate); 
    $('#target').append(templateFn(data)); 

    // ... 

}); 

だから私はテンプレートがプリコンパイルされると、人はこれを行うだろう理解:

define(['jquery', 'handlebars'], function($, Handlebars) { 

    // ... 

    var data = {"some": "data", "some_more": "data"}; 
    var template = Handlebars.templates['my_template']; 
    $('#target').append(template(data)); 

    // ... 

}); 

注2番目のコードスニペットについては、以下:

  1. をRequireJSモジュールなしテンプレートが長く引っ張られます。
  2. Handlebars.compile()は使用されなくなりました。

通常、ファイルシステムレベルの変更がテンプレートファイルに発生するたびに、テンプレートをコンパイルするためにGuardを実行しますか?

私の質問は基本的にはですが、開発者がこれを行う意思はありますか?

if (development) { 
    compile templates 
} 
else { 
    use precompiled templates 
} 

また、私はRailsも使用していますので、おそらくSass-Railsのような黒い魔法があります。

答えて

11

Require.js Handlebars Plugin(https://github.com/SlexAxton/require-handlebars-plugin)またはepeliのrequirejs-hbs(https://github.com/epeli/requirejs-hbs)をご覧ください。

+1

はい!私がこの質問を投稿した後、同僚がrequire-handlebars-pluginと言いました。それは完璧です!それはさらにi18nサポートを持っているので、それはさらに素晴らしい。私はそれを試して、それは広告として動作します。開発モードからプロダクションにコードを変更する必要はなく、ビルドプロセスにフックできるビルドにはr.jsが使用されます。テンプレートは、ビルドされたファイルにインライン展開されます。プロダクションで変更する必要があるのは、require.js + data-main ...を含むスクリプトタグです。これはアセットマネージャが処理できます。 –

+0

最新版では、i18nの機能が削除されました。 – magiccrafter

0

Require.jsとハンドルバーについてこのartcleはこの質問をしているのでhttp://seanamarasinghe.com/developer/requirejs-handlebars/

+0

こんにちはDavid。申し訳ありませんが、OPはHandlebars *プリコンパイルされた*テンプレートを要求しました。あなたがリンクした記事は役に立たない:( –

2

を助けるかもしれない、私はこれを達成するための別の方法は、兵卒ウォッチ経由であるかもしれないことを発見しました。しかし、さらに良い方法は、GruntとBrowserifyを使用してRequireJSをスキップすることです。次に、NPMパッケージを使用します...そして、RequireJSで利用可能なライブラリのほとんどは、NPMパッケージ(jQuery、Backbone、AngularなどのDOMベースのライブラリでさえ驚くほど)として利用できるようです。その後、同期が(必要に使用)のものを必要とするように呼び出します。

var $ = require('jquery'), 
    Backbone = require('backbone'), 
    AppRouter = require('./app/routers/app'); 

// Compile LESS and attach resulting CSS to the HEAD. 
require('./less/app.less'); 

$(function() { 
    new AppRouter(); 
    Backbone.history.start(); 
}); 

これは非常に良くなり、アプリは完全にそれが実行されるたびに構築されているので、それが可能です。これをGrunt Watchと組み合わせると、変更が発生するたびにアプリケーションが再構築され、ビジネスにも役立ちます。

ビルドプロセスでは、Handlebarsテンプレートを作成する処理も行われます。テンプレートを含めるには、require('./templates/my-template.hbs');を実行するだけで、grunt-browserifyのビルドプロセスはこのrequire()呼び出しを見つけ、テンプレートをコンパイルし、コンパイルされたテンプレートをビルドアプリjsファイルに含めます。

要件よりもかなり良い!

関連する問題