2013-08-19 25 views

Trả lời

22

Nếu mẫu của bạn được biên dịch sẵn, bạn có thể truy cập vào partials của bạn thông qua Handlebars.partials['partial-name']() cũng như gọi cho họ từ một mẫu qua {{> partial}} helper.

Điều này thật tuyệt vì bạn có thể viết một hàm tiện ích để hiển thị mẫu cho dù đó là mẫu toàn bộ hoặc một phần.

ví dụ:

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

Hope this helps bất kỳ ai khác muốn sử dụng tay lái như tôi làm.

+0

Handlebars.partials ['partial-name'] không trả về một hàm mặc dù, nó trả về mẫu (một chuỗi). Cảm ơn bạn đã chỉ ra. – mynameistechno

+0

@mynameistechno Có lẽ vì bạn không biên dịch trước các mẫu của mình (như bạn nên làm!) –

1

Để sử dụng một phần từ mẫu, chỉ cần bao gồm {{> 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

Và làm thế nào tôi sẽ làm cho một phần từ javascript (không phải trong một mẫu)? –

+0

Bạn có nghĩa là điều này -: el.html (this.template (yourData)); –

+0

Chỉ cần một fyi tại sao đây không phải là câu trả lời được chấp nhận: Đây là tất cả thông tin có thể dễ dàng tìm thấy trong tài liệu của Handlebar và là cách sử dụng cơ bản của một phần. Tôi đã hoàn toàn nhận thức được làm thế nào để sử dụng một phần bên trong một khuôn mẫu trước khi đặt câu hỏi, nhưng phải mất một số đào vào nguồn của Handlebar để tìm hiểu làm thế nào để render một phần trực tiếp từ javascript. –

14

Nó dễ dàng hơn để làm điều đó theo cách khác xung quanh - để biên dịch tất cả các mẫu của bạn như các mẫu bình thường, sau đó làm cho họ có sẵn như là partials:

Handlebars.partials = Handlebars.templates 

Điều này làm cho nó có thể sử dụng các mẫu của bạn như thường lệ, và như partials cũng như:

{{> normalTemplate}} 
+1

Ý tưởng thú vị. Có một nhược điểm hoặc một lý do bạn muốn muốn partials không phải là mẫu bình thường? (Nếu không, có vẻ như Handlebars chỉ có thể sử dụng cú pháp '{{> xxx}}' có nghĩa là bao gồm một mẫu khác, và hoàn toàn không có khái niệm partials?) –

+1

Chính xác suy nghĩ của tôi. Tôi không hiểu khái niệm partials, và vẫn chưa tìm được lý do chính đáng để sử dụng chúng. Tôi đoán đó là một điều ước? Hoặc một số loại tối ưu hóa ... Không quan trọng nếu bạn (và bạn nên) biên dịch trước các mẫu. Tôi có thể thiếu một cái gì đó, nhưng với biên dịch trước ít nhất, phương pháp này có vẻ an toàn. –

+2

Thực sự thú vị "hack", khá hữu ích với các mẫu biên dịch trước thực sự! – Vadorequest

4

Để thể hiện một phần từ javascript bạn có thể sử dụng

Handlebars.partials["myPartial"]() 
Các vấn đề liên quan