2013-07-26 7 views
7

Ich möchte eine Hilfsfunktion in einer anderen Hilfsfunktion verwenden. Im unteren Code möchte ich den Nachnamen hervorheben, wenn er "Finch" Wort enthält. Ich habe dafür eine Helper-Klasse geschrieben. Wenn wir in der hbs-Datei verwenden, wäre die Syntax {{highlight name}}. Aber wie benutze ich es, da ich es in einer anderen Hilfsklasse verwenden muss.So rufen Sie eine benutzerdefinierte Hilfsfunktion in einem anderen benutzerdefinierten Hilfsprogramm auf

Unten ist mein Code:

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); 
    }); 

Hier ist die Arbeits Geige: http://jsfiddle.net/wC6JT/4/

Hier ist die Geige, wo "Highlight" Helfer genannt .: http://jsfiddle.net/wC6JT/3/. Dies führt zu keinen Ergebnissen, da wir Konsolenfehler für person.lastName bekommen, die nicht in "highlight" register helper erkannt werden.

Ich möchte "Highlight" Helfer in Fullname Helfer für person.lastName verwenden. Wie kann dies erreicht werden?

+0

@muistooshort: Ich habe meinen Code und Geige aktualisiert. Sein Tippfehler. es ist person.lastName – Cindrella

Antwort

4

Extrahieren Sie den Inhalt der Methode, die Sie in der ersten Methode verwenden möchten, in eine eigene Javascript-Methode. Dann rufen Sie bei Bedarf diese Javascript-Methode in beiden Helfern auf.

Sie können es nicht tun, wenn Sie den Inhalt einer der Methoden in eine eigene Javascript-Methode umgestalten.

in Ihrem Fall So sollte es in etwa so aussehen:

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

Hier ist die Geige: es hat nicht funktioniert. http://jsfiddle.net/wC6JT/14/. Wenn ich Highlight Helper entfernen, dann funktioniert es, aber es zeigt ganze Tag anstelle von HTML-Sache. – Cindrella

+0

Ich bin mir nicht sicher, was mit der Geige schief gelaufen ist, aber ich habe es in meiner Anwendung implementiert und es funktioniert perfekt. Vielen Dank. – Cindrella

+1

Sollte nicht 'Handlebars.registerHelper ('highlight', highlightJavascript (person));' be 'Handle.registerHelper ('highlight', highlightJavascript);'? Sie möchten 'registerHelper' die Funktion geben, nicht aufrufen. –

1

Sie auf diese Weise verwenden können: http://goo.gl/oY4IIO nicht String verketten müssen.

<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); 
}); 

Ausgang: Test: 2,33 Format: 2,33

+0

Sie sollten den Hauptinhalt aus dem Link hier einfügen, als ob der Link ungültig wäre. –

+0

@ user3250923: Hmm Schöne.Aber nach einer langen Zeit. Danke für den Link. Bitte fügen Sie den Linkinhalt hinzu. – Cindrella

2

Um einen Lenker Helfer aus einer anderen Funktion aufrufen, können Sie Handlebars.helpers verwenden:

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); 
}); 

Hier ist eine arbeitende Geige: http://jsfiddle.net/acLcsL6h/1/

Lesen Sie this blog post für ein anderes Beispiel.

Verwandte Themen