2012-11-23 127 views
1

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

eg 

steve: 

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

jobs: 

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

回答

1

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/