2012-11-23 1 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를 사용 : 당신이 뭔가를 할 수 있습니다.

데모 : 당신이 이름으로 registerHelper을 계속 사용하고 싶다면 http://jsfiddle.net/ambiguous/3Knj3/

, 다음 원숭이 전에 그것은 단지 안전에 대한 참조는 패치 :

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/