Tôi đang làm việc trên ứng dụng Rails 3.1 bằng JavascriptMVC và các mẫu ejs trong ứng dụng khách để thực hiện một số tính năng phức tạp trên ứng dụng của mình. Thật không may là cú pháp ejs rất giống với cú pháp erb, đến mức tôi không thể giữ mã trong cùng một tệp (mặc dù nếu ai đó biết cách tốt để làm điều này, tôi sẽ ngây ngất). Cuối cùng tôi muốn có thể áp dụng một số mã rails trong mẫu ejs (nói cho I18n) nhưng tại thời điểm này tôi sẽ chỉ giải quyết cho việc này để làm việcRails mẫu từng phần bằng cách sử dụng trình xử lý tùy chỉnh đang thoát html
Theo ví dụ từ this question Tôi đã tạo một trình xử lý mẫu tùy chỉnh trông như thế này:
module CommonModel
class Handler < ActionView::Template::Handler
include ActionView::Template::Handlers::Compilable
def compile(template)
template.source.inspect
end
end
end
ActionView::Template.register_template_handler :ejs, CommonModel::Handler
Sau đó, tôi đã tạo ra một mẫu phần có mã EJS của tôi trong đó: _jmvc_templates.html.ejs
<script type="text/ejs" id="my_ejs_template">
<div>Some ejs here</div>
</script>
trong mẫu hiện tại của tôi, tôi cố gắng để bao gồm của tôi phần:
<%= render 'path/to/my/ejs/templates/jmvc_templates' %>
Tại thời điểm này, các tập tin được bao gồm và xử lý của tôi đang sử dụng, nhưng tất cả mọi thứ được thoát, vì vậy div của tôi trong mẫu của tôi được kết xuất vào trang như thế này:
<div%gt;
tôi chắc chắn tôi đang thiếu một cái gì đó hiển nhiên ở đây, nhưng tôi không biết nó có thể là gì ... Làm thế nào tôi có thể có được xử lý mẫu này để chỉ bao gồm mẫu dựa trên ejs của tôi mà không cần thoát tất cả các html trong nó?
Edit:
tôi đã tìm thấy rằng gọi render với html_safe hoạt động:
<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %>
Điều này có vẻ giống như một kludge mặc dù - đó có phải là một cách để có được các renderer ERB để điều trị văn bản từ trình xử lý của tôi dưới dạng văn bản an toàn html.
Vì vậy, một cái gì đó giữa bạn 'def compile' và '<% = làm ...%>' đang làm cái gì đó để chuỗi mà gửi nó trở lại thành "không HTML an toàn" chế độ. –
Làm cho tinh thần, nhưng đó sẽ là gì? Tôi đang sử dụng Rails 3.1 ra khỏi hộp khác ... –
Maybee bạn nên sử dụng thô. Kiểm tra [thô vs html_safe vs h] [1] [1]: http://stackoverflow.com/questions/4251284/raw-vs-html-safe-vs-h-to-unescape-html – charlysisto