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、同じヘルパー名を 2 回使用すると、例外が発生します。

デモ: 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 に答える