2013-07-26 30 views
7

Başka bir yardımcı işlevde bir yardımcı işlev kullanmak istiyorum. Aşağıdaki kodda "Finch" kelimesini içeriyorsa soyadını vurgulamak istiyorum. Bunun için yardımcı sınıfım var. Eğer hbs dosyasında kullanırsak, sözdizimi {{highlight name}} olacaktır. Ama onu başka bir yardımcı sınıfta kullanmam gerektiğinden nasıl kullanılır.Başka bir özel yardımcıda bir özel yardımcı işlevi nasıl çağrılır

İşte
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); 
    }); 

çalışma keman olduğunu: Burada

http://jsfiddle.net/wC6JT/4/ "vurgulamak" yardımcı denir .: http://jsfiddle.net/wC6JT/3/ keman olduğunu

Aşağıda benim kodudur. Bu, person.lastName için "vurgu" yazım yardımcısı tanınmayan konsol hataları alacağımızdan, herhangi bir sonuç üretmeyecektir.

Person.lastName için fullname helper'da "highlight" yardımcısını kullanmak istiyorum. Bu nasıl sağlanabilir?

+0

@muistooshort: Kodumu güncelledim ve keman. Yazım hatası. o kişidir.sonraki – Cindrella

cevap

4

İlk yöntemde kullanmak istediğiniz yöntemin içeriğini kendi javascript yöntemine ayıklayın. Daha sonra, her iki yardımcıda da gerekli olan javascript yöntemini çağırın.

Yöntemlerden birinin içeriğini kendi javascript yöntemine yeniden düzenlemediğiniz sürece bunu yapamazsınız.

Yani sizin durumunuzda bu gibi görünmelidir: http://goo.gl/oY4IIO dizeyi bağlamak gerekmez:

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

İşte keman: işe yaramadı. http://jsfiddle.net/wC6JT/14/. Vurgu yardımcıyı kaldırırsam çalışır, ancak html olayı yerine tüm etiketini görüntüler. – Cindrella

+0

Keman ile neyin yanlış gittiğinden emin değilim, ancak başvurumda ve mükemmel bir şekilde çalıştım. Teşekkür ederim. – Cindrella

+1

Handlebars.registerHelper ('highlight', highlightJavascript (kişi)); '' 'Handlebars.registerHelper ('highlight', highlightJavascript);'? "RegisterHelper" işlevini vermek istiyorsanız, buna çağrı yapmayın. –

1

Bu şekilde kullanabilirsiniz.

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

çıkışı: testi: 2.33 biçimi: 2.33

+0

Bağlantıyı değiştirirseniz, ana içeriği buraya bağlantıdan eklemelisiniz. –

+0

@ user3250923: Hmm Güzel olan.Ama uzun bir süre sonra. Bağlantı için teşekkürler. Lütfen bağlantı içeriğini ekleyin. – Cindrella

2

başka bir işlevden bir Gidon yardımcı aramak için, kullanabileceğiniz Handlebars.helpers: Burada

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

çalışan bir keman:Başka bir örnek için this blog post numarasını okuyun.

İlgili konular