2013-07-26 14 views
7

Desidero utilizzare una funzione di supporto in un'altra funzione di supporto. Nel codice seguente voglio evidenziare il cognome se contiene la parola "Finch". Ho una lezione di aiuto per gli scrittori. Se utilizziamo il file hbs, la sintassi sarebbe {{highlight name}}. Ma come usarlo dal momento che devo usarlo in un'altra classe di supporto.Come chiamare una funzione di aiuto personalizzata in un altro helper personalizzato

Qui di seguito è il mio codice:

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

Ecco il violino di lavoro: http://jsfiddle.net/wC6JT/4/

Ecco il violino in cui aiuto "clou" si chiama .: http://jsfiddle.net/wC6JT/3/. Ciò non produrrà alcun risultato poiché avremo errori di console per person.lastName non riconosciuti nell'helper di registro "highlight".

Desidero utilizzare l'helper "highlight" nell'helper fullname per person.lastName. Come può essere raggiunto.

+0

@muistooshort: Ho aggiornato il mio codice e il mio violino. È un errore di battitura. è person.lastName – Cindrella

risposta

4

Estrarre il contenuto del metodo che si desidera utilizzare nel primo metodo nel proprio metodo javascript. Quindi chiama quel metodo javascript in entrambi gli helper, se necessario.

Non è possibile farlo a meno che non si rifatta il contenuto di uno dei metodi nel proprio metodo javascript.

Quindi nel tuo caso dovrebbe apparire qualcosa di simile:

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

Ecco il violino: non ha funzionato. http://jsfiddle.net/wC6JT/14/. Se rimuovo l'helper di evidenziazione, funziona ma mostra il suo intero tag anziché la cosa html. – Cindrella

+0

Non sono sicuro di cosa sia andato storto con il violino, ma l'ho implementato nella mia applicazione e funziona perfettamente. Grazie. – Cindrella

+1

Non dovrebbe 'Handlebars.registerHelper ('highlight', highlightJavascript (person));' be 'Handlebars.registerHelper ('highlight', highlightJavascript);'? Vuoi dare a 'registerHelper' la funzione, non chiamarla. –

1

è possibile utilizzare in questo modo: http://goo.gl/oY4IIO Non c'è bisogno di concatenare stringa.

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

uscita: prova: 2.33 formato: 2.33

+0

Dovresti includere il contenuto principale dal link qui come se il link cambia la tua risposta non sarebbe valida. –

+0

@ user3250923: Hmm Bello.Ma dopo tanto tempo. Grazie per il link. Si prega di includere il contenuto del link. – Cindrella

2

Per chiamare un aiutante Manubrio da un'altra funzione, è possibile utilizzare 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); 
}); 

Qui è un violino funzionante: http://jsfiddle.net/acLcsL6h/1/

Leggi this blog post per un altro esempio.

Problemi correlati