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;
});
答案 0 :(得分: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);
};