ฉันจะเขียนอะไรแบบนี้เพื่อรวมไว้ในเทมเพลต แต่ใน Haml ได้อย่างไร
<script>
$(document).ready( function() {
$('body').addClass( 'test' );
} );
</script>
ฉันจะเขียนอะไรแบบนี้เพื่อรวมไว้ในเทมเพลต แต่ใน Haml ได้อย่างไร
<script>
$(document).ready( function() {
$('body').addClass( 'test' );
} );
</script>
คำตอบ:
:javascript
$(document).ready( function() {
$('body').addClass( 'test' );
} );
เอกสาร: http://haml.info/docs/yardoc/file.REFERENCE.html#javascript-filter
คุณสามารถทำสิ่งที่ Chris Chalmers ทำในคำตอบของเขาได้ แต่คุณต้องแน่ใจว่า HAML ไม่แยกวิเคราะห์ JavaScript วิธีการนี้จะเป็นประโยชน์จริงเมื่อคุณจำเป็นต้องใช้ชนิดที่แตกต่างกันมากกว่าซึ่งจะเป็นที่ผมต้องทำสำหรับtext/javascript
MathJax
คุณสามารถใช้plain
ตัวกรองเพื่อป้องกันไม่ให้ HAML แยกวิเคราะห์สคริปต์และทำให้เกิดข้อผิดพลาดในการซ้อนที่ผิดกฎหมาย:
%script{type: "text/x-mathjax-config"}
:plain
MathJax.Hub.Config({
tex2jax: {
inlineMath: [["$","$"],["\\(","\\)"]]
}
});
ดังนั้นฉันจึงลองข้างต้น: javascript ซึ่งใช้งานได้ :) อย่างไรก็ตาม HAML ห่อรหัสที่สร้างขึ้นใน CDATA ดังนี้:
<script type="text/javascript">
//<![CDATA[
$(document).ready( function() {
$('body').addClass( 'test' );
} );
//]]>
</script>
HAML ต่อไปนี้จะสร้างแท็กทั่วไปสำหรับรวม (เช่น) typekit หรือ google analytics code
%script{:type=>"text/javascript"}
//your code goes here - dont forget the indent!
CDATA
ให้ฉันและไม่ได้%script
ทำงานให้ฉันหากมีการเยื้องที่ผิดปกติใน js
ฉันใช้fileupload-jqueryใน haml js ดั้งเดิมอยู่ด้านล่าง:
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
</script>
ตอนแรกฉันใช้การ:cdata
แปลง (จากhtml2haml ) มันทำงานไม่ถูกต้อง (ปุ่มลบไม่สามารถลบองค์ประกอบที่เกี่ยวข้องในการโทรกลับ)
<script id='template-download' type='text/x-tmpl'>
<![CDATA[
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
]]>
</script>
ดังนั้นฉันจึงใช้:plain
ตัวกรอง:
%script#template-download{:type => "text/x-tmpl"}
:plain
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
ผลลัพธ์ที่แปลงจะเหมือนกับต้นฉบับทุกประการ
ดังนั้น:plain
ตัวกรองใน Senario นี้จึงเหมาะกับความต้องการของฉัน
: plain ไม่แยกวิเคราะห์ข้อความที่กรอง สิ่งนี้มีประโยชน์สำหรับข้อความขนาดใหญ่ที่ไม่มีแท็ก HTML เมื่อคุณไม่ต้องการให้บรรทัดขึ้นต้นด้วย หรือ - เพื่อแยกวิเคราะห์
สำหรับรายละเอียดเพิ่มเติมโปรดดูที่haml.info