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;
  });

最佳答案

registerHelper implementation非常简单:

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/

关于javascript - 如何避免在handlebars.js中发生冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13522849/

10-08 23:05