Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免handlebar.js中的冲突_Javascript_Templates_Conflict_Handlebars.js - Fatal编程技术网

Javascript 如何避免handlebar.js中的冲突

Javascript 如何避免handlebar.js中的冲突,javascript,templates,conflict,handlebars.js,Javascript,Templates,Conflict,Handlebars.js,js有一个强大的功能,就是registerHelper。当不同的人在一个页面中同时使用它时,如何避免功能冲突 eg steve: Handlebars.registerHelper('getHeight', function(obj) { return obj.pic_height / obj.pic_width * 200 || 130; }); jobs: Handlebars.registerHelper('getHeight', function(obj) {

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;
  });
问题很简单:

Handlebars.registerHelper = function(name, fn, inverse) {
  if(inverse) { fn.not = inverse; }
  this.helpers[name] = fn;
};
没有检查是否已经定义了helper,只需将helper写入
handlebar.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将引发异常

演示:

如果您想继续使用
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);
};
演示:

非常简单:

Handlebars.registerHelper = function(name, fn, inverse) {
  if(inverse) { fn.not = inverse; }
  this.helpers[name] = fn;
};
没有检查是否已经定义了helper,只需将helper写入
handlebar.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将引发异常

演示:

如果您想继续使用
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);
};
演示: