2013-07-26 2 views
7

다른 도우미 함수에서 한 도우미 함수를 사용하고 싶습니다. 아래 코드에서 "Finch"단어가 포함 된 성을 강조하고 싶습니다. 나는 writtern helper class를 가지고있다. hbs 파일에서 사용하는 경우 구문은 {{강조 이름}}이됩니다. 하지만 다른 헬퍼 클래스에서 사용해야하므로 사용하는 방법.다른 사용자 지정 도우미에서 하나의 사용자 지정 도우미 함수를 호출하는 방법

다음
Handlebars.registerHelper('fullName', function(person) { 
    return person.firstName + " " + person.lastName; 
    }); 

    Handlebars.registerHelper('highlight', function(person) {  
var item = (person.lastName).replace('Finch', '<span style="color: red">' 
    + Finch + '</span>'); 
return new Handlebars.SafeString(item); 
    }); 

이 작업 바이올린입니다 : 여기

http://jsfiddle.net/wC6JT/4/는 "하이라이트"도우미를 호출 : http://jsfiddle.net/wC6JT/3/ 바이올린입니다

다음은 내 코드입니다. "강조 표시"레지스터 도우미에서 인식되지 않는 person.lastName에 대한 콘솔 오류가 발생하므로 결과가 생성되지 않습니다.

person.lastName의 fullname helper에 "highlight"도우미를 사용하고 싶습니다. 어떻게 확인할 수 있습니까?

+0

@muistooshort : 코드 및 바이올린을 업데이트했습니다. 그 오타. 그것은 사람입니다. 마지막 이름 – Cindrella

답변

4

첫 번째 메소드에서 사용하려는 메소드의 컨텐츠를 자체 javascript 메소드로 추출하십시오. 그런 다음 필요에 따라 두 헬퍼에서 javascript 메서드를 호출합니다.

메소드 중 하나의 내용을 자체 javascript 메소드로 리팩터링하지 않으면 수행 할 수 없습니다.

그래서 귀하의 경우는 다음과 비슷한 모습이 될 것입니다 http://goo.gl/oY4IIO 문자열을 연결할 필요가 없다 :

Handlebars.registerHelper('fullName', function(person) { 
    return person.firstName + " " + highlightJavascript(person); 
    }); 

Handlebars.registerHelper('highlight', highlightJavascript); 

highlightJavascript : function(person) { 
    var item = (person.lastName).replace('Finch', '<span style="color: red">' 
    + Finch + '</span>'); 
return new Handlebars.SafeString(item); 
} 
+0

다음은 바이올린입니다. 작동하지 않았습니다. http://jsfiddle.net/wC6JT/14/. 강조 표시 도우미를 제거하면 HTML 도큐먼트 대신에 태그가 표시됩니다. – Cindrella

+0

바이올린에 무엇이 잘못되었는지는 확실하지 않지만 응용 프로그램과 그 작업이 완벽하게 구현되었습니다. 고맙습니다. – Cindrella

+1

'Handlebars.registerHelper ('highlight ', highlightJavascript (person)),'be 'Handlebars.registerHelper ('highlight ', highlightJavascript); 함수를 호출하지 않고'registerHelper'를주고 싶습니다. –

1

당신은이 방법을 사용할 수 있습니다.

<script id="tmp" type="text/x-handlebars-template"> 
    <p>test: {{test "2.3333333"}}</p> 
    <p>format: {{format "2.3333333"}}</p> 
</script> 

Handlebars.registerHelper('format', function (value) { 
    return parseFloat(value).toFixed(2); 
}); 
Handlebars.registerHelper('test', function (value) { 
    var source = '{{format x}}'; 
    var context = {x:value}; 
    var html = Handlebars.compile(source)(context); 
    return new Handlebars.SafeString(html); 
}); 
$(document).ready(function() { 
    var source = $('#tmp').html(); 
    var template = Handlebars.compile(source); 
    var html = template(); 

    $('#main').html(html); 
}); 

출력 : 시험 : 2.33 형식 : 2.33

+0

링크 변경 사항이 유효하지 않은 것처럼 링크의 주요 내용을 여기에 포함시켜야합니다. –

+0

@ user3250923 : 안녕하세요.그러나 오랜 시간이 지난 후에. 링크를 가져 주셔서 감사합니다. 링크 내용을 포함하십시오. – Cindrella

2

다른 함수에서 핸들 바 도우미를 호출하려면, 당신은 사용할 수 있습니다 Handlebars.helpers : 여기

Handlebars.registerHelper('fullName', function(person) { 
    var lastName = Handlebars.helpers.highlight.apply(this, [person.lastName]); 
    var firstName = Handlebars.Utils.escapeExpression(person.firstName); 
    return new Handlebars.SafeString(firstName + " " + lastName); 
}); 

Handlebars.registerHelper('highlight', function(str) {  
    var safeStr = Handlebars.Utils.escapeExpression(str); 
    var item = safeStr.replace("Finch", "<em>Finch</em>"); 
    return new Handlebars.SafeString(item); 
}); 

작동하는 바이올린 : http://jsfiddle.net/acLcsL6h/1/

다른 예로는 this blog post을 읽으십시오.

관련 문제