鉴于我有这个javascript文件
的src / JS / functions.js
(function() {
crc32 = function(str, crc ) {
...
};
})();
此文件是静态网站的一部分,和我想在模板中使用crc32(),如下所示:
index.hbs
<script type="text/javascript" charset="utf-8">
var crc_checksum = {{checksum solution}};
</script>
当然需要中间帮助
helpers.js
Handlebars.registerHelper('checksum', function(value){
this.checksum = return value;
});
我不想将crc32代码复制粘贴到帮助程序中(因为这会复制代码)。有没有办法将外部JS文件加载到帮助程序的命名空间中?
答案 0 :(得分:2)
您可以使用“node.js”方式构建crc32
文件,并使用browserify在您的网站中使用它。还有其他方法可以在节点和浏览器上使用crc32
对象。然后你可以在帮助文件中require
...
<强>的src / JS / functions.js 强>
(function(exports) {
exports.crc32 = function (str, crc) { ... };
})(window || module.exports);
<强> helpers.js 强>
var crc32 = require('./src/js/functions').crc32;
Handlebars.registerHelper('checksum', function (value) {
return crc32(value);
});
答案 1 :(得分:0)
当然,在创建帮助程序时,只需遵循与任何其他节点库相同的模块模式。
将帮助程序包裹在module.exports.register
函数中:
module.exports.register = function (Handlebars, options, params) {
Handlebars.registerHelper('checksum', function(src) {
return require('your-checksum-lib')(src);
});
};
然后确保告诉Assemble文件的位置:
assemble: {
options: {
helpers: ['path/to/checksum.js']
}
}
或者......如果帮助器实际上是一个npm模块本身,你可以将它添加到package.json中的devDependencies
和keywords
,而Assemble会自动将其添加。 e.g:
{
"name": "foo",
"devDependencies": {
"handlebars-helper-checksum": "~0.1.0",
},
"keywords": [
"handlebars-helper-checksum"
]
}
但是,您也可以在handlebars-helpers repo上为此帮助程序发出请求或pr,我们可以将其添加到库中。