2011-09-30 16 views
5

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:

&lt;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.

+0

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ế độ. –

+0

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 ... –

+0

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

Trả lời

0

Maybee bạn nên sử dụng thô. Check this

def compile(template) 
    raw template.source.inspect 
end 
+0

Vâng, bạn sẽ nghĩ như vậy - thật không may, nó cũng không hoạt động. Nó gần như là nếu Rails tự động thoát khỏi đầu ra từ trình xử lý mẫu của tôi, bất kể tôi làm gì. Tôi tự hỏi nếu không có một số loại cấu hình mà tôi cần phải xác định vị trí tại thời điểm này ... –