Tôi có một mẫu mà tôi muốn sử dụng cả một phần, và tự nó từ javascript.Handlebars.js: Sử dụng một phần giống như mẫu bình thường, đầy đủ
Trả lời
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.
Để 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>
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)? –
Bạn có nghĩa là điều này -: el.html (this.template (yourData)); –
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. –
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}}
Ý 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?) –
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. –
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
Để thể hiện một phần từ javascript bạn có thể sử dụng
Handlebars.partials["myPartial"]()
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
@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!) –