1

handlebars.js 有一个强大的功能,就是 registerHelper。当不同的人在一个页面中一起使用时,如何避免功能冲突?

eg

steve:

 Handlebars.registerHelper('getHeight', function(obj) {
      return obj.pic_height / obj.pic_width * 200 || 130;
  });

jobs:

 Handlebars.registerHelper('getHeight', function(obj) {
      return 120;
  });
4

1 回答 1

1

registerHelper实现非常简单:

Handlebars.registerHelper = function(name, fn, inverse) {
  if(inverse) { fn.not = inverse; }
  this.helpers[name] = fn;
};

没有检查是否已经定义了助手,助手只是简单地写入Handlebars.helpers对象,就是这样。

不过,没有什么能阻止您添加自己的registerHelper抱怨版本。你可以这样做:

Handlebars.paranoidRegisterHelper = function(name, fn, inverse) {
    if(name in this.helpers)
        throw 'Someone is trying to redefine the ' + name + ' helper';
    this.registerHelper(name, fn, inverse);
};

然后使用paranoidRegisterHelper相同的助手名称两次会引发异常。

演示:http: //jsfiddle.net/ambiguous/3Knj3/

如果您想继续registerHelper用作名称,那么在猴子修补它之前只需安全地引用它:

var registerHelper = Handlebars.registerHelper;
Handlebars.registerHelper = function(name, fn, inverse) {
    if(name in this.helpers)
        throw 'Someone is trying to redefine the ' + name + ' helper';
    registerHelper.apply(this, arguments);
};

演示:http: //jsfiddle.net/ambiguous/hUu2r/

于 2012-11-23T06:35:18.943 回答