2013-08-19 8 views

Odpowiedz

22

Jeśli Twoje szablony są skompilowane, można uzyskać dostęp do partials poprzez Handlebars.partials['partial-name']() jak nazywają je z szablonu poprzez {{> partial}} pomocnika.

To jest miłe, ponieważ można następnie napisać funkcję narzędzia do renderowania szablonu, niezależnie od tego, czy jest to pełny szablon, czy częściowy.

ex:

function elementFromTemplate(template, context) { 
    context = context || {}; 
    var temp = document.createElement('div'); 
    temp.innerHTML = templates[template] ? templates[template](context) : Handlebars.partials[template](context); 
    return temp.firstChild; 
} 

myDiv.appendChild(elementFromTemplate('myPartial', context));

myDiv.appendChild(elementFromTemplate('a-whole-template'));

Nadzieja pomaga to ktoś inny, kto chce korzystać Kierownica jak ja.

+0

Handlebars.partials ['partial-name'] nie zwraca jednak funkcji, zwraca szablon (ciąg znaków). Dzięki za wskazanie. – mynameistechno

+0

@mynameistechno Prawdopodobnie dlatego, że nie prekompilujesz swoich szablonów (tak jak powinno być!). –

1

Aby użyć częściowej z szablonu, należy po prostu dołączyć {{> partialName}}.

<script id="base-template" type="text/x-handlebars-template"> 
    <div> 
    {{> person}} <!-- This is the partial template name --> 
    </div> 
</script> 

<script id="partial-template" type="text/x-handlebars-template"> 
    <div class="person"> 
    <h2>{{first_name}} {{last_name}}</h2> 
    <div class="phone">{{phone}}</div> 
    </div> 
</script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
    var template = Handlebars.compile($("#base-template").html()); 

    //Aliasing the template to "person" 
    Handlebars.registerPartial("person", $("#partial-template").html()); 

    template(yourData); 
    } 
</script> 
+2

I w jaki sposób renderować część z javascript (nie w szablonie)? –

+0

Masz na myśli to -: el.html (this.template (yourData)); –

+0

Tylko fyi, dlaczego nie jest to zaakceptowana odpowiedź: to wszystko informacje, które można łatwo znaleźć w dokumentacji Handlebar i są podstawowym użyciem częściowego. W pełni zdawałem sobie sprawę z tego, jak użyć częściowego wewnątrz szablonu, zanim zadaję pytanie, ale trzeba trochę wkopać się w źródło Handlebara, aby dowiedzieć się, jak renderować cząstkę bezpośrednio z javascriptu. –

14

Łatwiej zrobić to na odwrót - przygotowanie wszystkich szablonów jako normalne szablony, a następnie udostępniać je jako podszablonów:

Handlebars.partials = Handlebars.templates 

Pozwala to korzystać z szablonów, jak zwykle, i jak partials, a także:

{{> normalTemplate}} 
+1

Interesujący pomysł. Czy istnieje jakiś minus lub powód, dla którego chciałbyś mieć częściowe, które nie są normalnymi szablonami? (Jeśli nie, wydaje się, że Handlebars mógłby po prostu użyć składni "{{> xxx}}" do oznaczenia innego szablonu, a nie mieć pojęcia cząstki w ogóle?) –

+1

Dokładnie moja myśl. Nie rozumiem koncepcji cząstkowych, a muszę jeszcze znaleźć dobry powód, aby z nich skorzystać. Sądzę, że to konwencja? Lub jakąś optymalizację ... Nie ma znaczenia, czy (i powinieneś) prekompilować szablony. Być może czegoś mi brakuje, ale przy prekompilacji przynajmniej ta metoda wydaje się bezpieczna. –

+2

Naprawdę interesujący "hack", całkiem przydatny w przypadku wstępnie skompilowanych szablonów! – Vadorequest

4

renderować częściowe z javascript można użyć

Handlebars.partials["myPartial"]() 
Powiązane problemy