2012-09-19 1 views
4

html 템플릿에 HandlebarsJS을 사용하고 있습니다 (또는 최소한 시작해야 함).하지만 막 다른 골목에 닿았을 수도 있습니다. 내가 원하는 것은 템플릿에 함수를 전달하는 것입니다.함수를 Handlebars 템플릿에 전달

<div id="divTemplate"> 
    <span onclick="{{func}}">{{text}}</span> 
</div> 

다음 내가

var source = $('#divTemplate').html(); 
var template = Handlebars.compile(source); 

var data = { 
    "text": "Click here", 
    "func": function(){ 
    alert("Clicked"); 
    } 
}; 

$('body').append(template(data)); 

같은 뭔가를 기대하지만, 함수가 초기화에서 실행되고, 이는 템플릿에 전달되지 않고, 그 결과는 다음과 같습니다

<span onclick="">Click here</span>. 

도우미 기능으로 몇 가지 물건을 시도했지만 너무 일하게 만들 수 없었다. 어떤 아이디어라도 감사 할 것입니다. :)

답변

13

이 솔루션은 매우 간단합니다.

핸들 바 출력합니다 속성이이 기능과 출력을 실행하는 기능, 경우 당신이 템플릿에 전달하는 개체의 속성, 반환 값

에서 귀하의 예를 들어, 함수가 어떤 값을 반환하지 않습니다 (그냥 경보를 호출), 그래서 출력이 비어 있습니다.

handlebars.registerHelper('stringifyFunc', function(fn) { 
    return new Handlebars.SafeString("(" + 
       fn.toString().replace(/\"/g,"'") + ")()"); 
}); 

다음 템플릿에서 방금도 캐릭터 라인되어야하는 기능을 사용할 필요가에서 :

<div id="divTemplate"> 
    <span onclick="{{stringifyFunc func}}">{{text}}</span> 
</div> 
+0

내가 점점 계속 "

이 같은 도우미 메서드를 만들 수 있습니다 예기치 않은 토큰 (예 : "data"변수 (함수가 포함 된))을 가지고 다른 것으로 바꿔야합니까? – isHristov

+0

클로저로 포장하는 것을 잊어 버렸습니다. 몇 가지 도피를해야합니다. 여기서 작동합니다. 피들 : http://jsfiddle.net/fHycd/ – BFil

+0

고마워요, 야. 아주 도움이되었습니다. :) – isHristov