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

Javascript 如何在Require.js中使用Handlebar运行时?,javascript,requirejs,gruntjs,handlebars.js,bower,Javascript,Requirejs,Gruntjs,Handlebars.js,Bower,在Grunt的package.json中,我指定了一个Handlebar编译器: "grunt-contrib-handlebars": "0.7.0" 在GrunFile中,我正在预编译把手模板: handlebars: compile: options: amd: true namespace: false files: [{ expand: true cwd: 'src/mustache/', src: ['

在Grunt的package.json中,我指定了一个Handlebar编译器:

"grunt-contrib-handlebars": "0.7.0"
在GrunFile中,我正在预编译把手模板:

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) {
...
"handlebars": "1.3.0"
在Bower的Bower.json中,我指定了把手:

define(['handlebars'], function(Handlebars) {
return Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
...
"handlebars": "1.3.0"
在我的RequireJS配置中,我指定了Handlebar运行时:

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'
  ...
(来源于此)

当编译的模板需要把手时

Handlebars = require 'handlebars'
把手未定义!我做错了什么!?我将感谢任何帮助


我宁愿不使用任何require插件。

将其声明为
handlebar.runtime.amd.js
将需要查找
handlebar.runtime.amd.js
,因此第一个问题可能是它

在将Handlebar与Require一起使用时,我在
runtime.amd
版本上遇到了问题,相反,我发现成功地配置了
handlebar.js
并声明了jQuery dep:

require.config
baseUrl:“/js/compiled/”
路径:
“jquery”:“../bower_components/jquery/jquery”
“下划线”:“../bower_组件/下划线/下划线”
“主干”:“../bower_组件/主干/主干”
“车把”:“../bower_部件/车把/车把”
垫片:
车把:
deps:['jquery']
出口:车把

示例中编译的AMD模板不是Handlebars 1.3.0模板编译器的输出。这可能是grunt contrib Handlebar使用早于1.3.0的版本编译模板时出现的问题

此外,在使用Handlebar AMD运行时,无需执行任何特殊操作。例如,您的最小值(对于车把运行时AMD加载程序)应该如下所示。无需DEP、垫片或出口

requirejs.config({
  ...
  paths: {
  'handlebars.runtime': 'lib/handlebars.runtime.amd'
  }
});
然后,如果要访问Handlebars对象(可能是为了注册助手),则需要从返回的对象访问默认属性

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

您可能还想在GitHub上查看我的回购协议,其中显示了把手和RequireJS一起工作。

不幸的是,这不适用于优化的构建。它只适用于未优化的构建,因为Handlebars对象被添加到全局范围。啊!为无意中得知我后来在哪里遇到麻烦而道歉。我也遇到过类似的问题,发现在构建配置中使用
wrapshem:true
可以在优化的构建中使用把手。有关更多详细信息,请参阅。