汇编/把手:运行外部js文件中定义的自定义函数

时间:2014-02-03 21:19:45

标签: handlebars.js assemble

鉴于我有这个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文件加载到帮助程序的命名空间中?

2 个答案:

答案 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中的devDependencieskeywords,而Assemble会自动将其添加。 e.g:

{
  "name": "foo",
  "devDependencies": {
    "handlebars-helper-checksum": "~0.1.0",
  },
  "keywords": [
    "handlebars-helper-checksum"
  ]
}

但是,您也可以在handlebars-helpers repo上为此帮助程序发出请求或pr,我们可以将其添加到库中。