如何在Require.js中使用Handlebars运行时?

时间:2014-03-04 22:13:05

标签: javascript requirejs gruntjs handlebars.js bower

在Grunt的package.json中,我已经指定了一个把手编译器:

"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的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'

把手未定义!我在这做错了什么!?我很感激任何帮助!

我宁愿不使用任何需要的插件。

2 个答案:

答案 0 :(得分:1)

示例中编译的AMD模板不是Handlebars 1.3.0模板编译器输出的内容。这可能是使用早于1.3.0版本的grunt-contrib-handlebars来编译模板的问题。

此外,使用Handlebars AMD运行时不需要做任何特殊操作。例如,你的min。(对于Handlebars运行时AMD加载器)应该是这样的。不需要deps,垫片或出口。

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

然后,如果要访问Handlebars对象(可能用于注册帮助程序),则需要从返回的对象访问默认属性。

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

您可能还希望在https://github.com/ryan-blunden/handlebars-requrejs上查看我在GitHub上的回购,其中显示了Handlebars和RequireJS一起工作。

答案 1 :(得分:0)

将其声明为handlebars.runtime.amd.js将需要查找handlebars.runtime.amd.js.js,因此第一个问题可能与此有关。

使用Handlebars时需要我在使用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'