Javascript 如何在Require.js中使用Handlebar运行时?
在Grunt的package.json中,我指定了一个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-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
可以在优化的构建中使用把手。有关更多详细信息,请参阅。