2

鉴于我有这个 javascript 文件

src/js/functions.js

(function() { 

    crc32 = function(str, crc ) { 
    ...
    }; 
})();

该文件是静态网站的一部分,想在模板中使用 crc32(),如下所示:

索引.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 文件加载到助手的命名空间中?

4

2 回答 2

2

crc32您可以以“node.js”的方式构建您的文件,并使用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);
});
于 2014-02-04T02:11:43.950 回答
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 中的devDependenciesandkeywords中,Assemble 会自动拾取它。例如:

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

但是,你也可以在handlebars-helpers repo上为这个助手提出请求或公关,我们可以将它添加到库中。

于 2014-02-04T02:14:00.423 回答