Khi bạn sử dụng =
trong Haml để bao gồm kết quả của tập lệnh, Haml sẽ thụt lại văn bản được chèn để nó khớp với thụt lề của vị trí được bao gồm. Ví dụ, nếu bạn có Haml mà trông giống như sau:
%html
%body
.foo
= insert_something
và insert_something
trả về một số HTML như thế này:
<p>
This is possily generated from Markdown.
</p>
sau đó kết quả HTML sẽ trông như thế này:
<html>
<body>
<div class='foo'>
<p>
This is possily generated from Markdown.
</p>
</div>
</body>
</html>
Lưu ý cách phần tử p
được thụt vào để khớp với vị trí của nó trong tài liệu. Thông thường điều này không quan trọng, vì cách khoảng trắng trong HTML bị thu gọn. Tuy nhiên, có các phần tử HTML trong đó khoảng trắng là quan trọng, cụ thể là pre
.
gì nó trông giống như đang xảy ra ở đây là Markdown bạn đang tạo ra một cái gì đó giống như
<pre><code>line 1 is fine
line 2 is wrapping
</code></pre>
và khi nó được bao gồm trong tập tin Haml của bạn (tôi đoán bạn đang sử dụng bố trí Haml với = yield
để bao gồm Markdown) nó đang được thụt lề và khoảng trắng hiển thị khi bạn xem trang. Lưu ý cách dòng đầu tiên ngay sau thẻ mở vì vậy không có khoảng trống thừa nào.
Có một số cách để khắc phục sự cố này. Nếu bạn đặt :ugly
option thì Haml sẽ không thụt lại các khối như thế này (xin lỗi tôi không biết cách bạn đặt tùy chọn Haml ở Nanoc).
Bạn cũng có thể sử dụng find_and_preserve
helper method. Này thay thế tất cả các dòng mới trong các thẻ nhạy cảm khoảng trắng với HTML thực thể 

, do đó họ sẽ không bị ảnh hưởng bởi khoảng trắng thêm khi thụt:
= find_and_preserve(yield)
Haml cung cấp một cách dễ dàng để sử dụng find_and_preserve
; ~
works the same as =
, except that it runs find_and_preserve
on the result, vì vậy bạn có thể làm:
~ yield
cảm ơn! Phương thức 'find_and_preserve' hoạt động như một nét duyên dáng! :) – mrmnmly
Nếu tôi không nhầm, bạn có thể sử dụng '~ yield' thay vì' = find_and_preserve (yield) '. – ddfreyne
@ddfreyne - Đúng vậy, ['~' hoạt động giống như '= find_and_preserve'] (http://haml.info/docs/yardoc/file.REFERENCE.html#tilde). Tôi sẽ thêm nó vào câu trả lời. – matt