2014-03-04 50 views
0

在咕嚕的的package.json我指定一個車把編譯:如何在Require.js中使用Handlebars運行時?

"grunt-contrib-handlebars": "0.7.0" 

在Gruntfile我預編譯車把模板:

handlebars: 
    compile: 
    options: 
     amd: true 
     namespace: false 
    files: [{ 
     expand: true 
     cwd: 'src/mustache/', 
     src: ['**/*.mustache'] 
     dest: 'public/js/compiled/templates' 
     ext: '.js' 
    }] 

每個編譯模板都需要一個車把AMD包裝:

define(['handlebars'], function(Handlebars) { 
return Handlebars.template(function (Handlebars,depth0,helpers,partials,data) { 
... 

在鮑爾的bower.json我指定車把:

"handlebars": "1.3.0" 

在我RequireJS配置我指定車把運行時:

require.config 
    baseUrl: '/js/compiled/' 
    paths: 
    'jquery': '../bower_components/jquery/jquery' 
    'underscore': '../bower_components/underscore/underscore' 
    'backbone': '../bower_components/backbone/backbone' 
    'handlebars': '../bower_components/handlebars/handlebars.runtime.amd' 
    ... 

(來源這裏https://github.com/components/handlebars.js/blob/v1.3.0/handlebars.runtime.amd.js

當編譯模板需要車把

Handlebars = require 'handlebars' 

把手是不確定的!我在這裏做錯了什麼!?我會很感激任何幫助!

我寧願不使用任何需要的插件。

回答

0

聲明它爲handlebars.runtime.amd.js將有要求尋找handlebars.runtime.amd.js.js,所以第一個問題可能與此。

使用時把手與要求我遇到了麻煩與runtime.amd版本,而是發現了成功與handlebars.js配置,並宣佈一個jQuery DEP:

require.config 
    baseUrl: '/js/compiled/' 
    paths: 
    'jquery': '../bower_components/jquery/jquery' 
    'underscore': '../bower_components/underscore/underscore' 
    'backbone': '../bower_components/backbone/backbone' 
    'handlebars': '../bower_components/handlebars/handlebars' 
    shim: 
    handlebars: 
     deps: ['jquery'] 
     exports: 'Handlebars' 
+0

不幸的是,這不適用於優化版本。它僅適用於未優化的版本,因爲Handlebars對象已添加到全局範圍。 –

+0

啊!無意中學習後來遇到麻煩的道歉。將留下的答案,以防其他人出現這種情況。 – max

+1

我遇到了類似的問題,並發現在構建配置中使用'wrapShim:true'可讓我在優化構建中使用Handlebars。看[這個問題](http:// stackoverflow。com/questions/24025475/handlebars-not-loading-after-require-js-optimization-with-grunt-requirejs/24025798#24025798)瞭解更多詳情。 –

1

在你的榜樣編譯AMD模板沒有什麼Handlebars 1.3.0模板編譯器會輸出。這可能是使用早於1.3.0版本的grunt-contrib-handlebars來編譯模板的問題。

另外,使用Handlebars AMD運行時沒有什麼特別的需要做。例如,最小的(對於Handlebars運行時AMD加載器)應該如下所示。不需要墊片,墊片或出口。

requirejs.config({ 
    ... 
    paths: { 
    'handlebars.runtime': 'lib/handlebars.runtime.amd' 
    } 
}); 

然後,如果你想(也許登記傭工)訪問車把對象,那麼你就需要從返回的對象訪問默認屬性。

var Handlebars = require('handlebars.runtime').default; 

你也可能要籤我的GitHub庫在https://github.com/ryan-blunden/handlebars-requrejs這表明車把和RequireJS一起工作。

相關問題