2011-01-17 9 views
5

Tôi đang xây dựng ứng dụng 3 đường ray javascript nặng. Nó sử dụng underscore.js, trong đó có một cơ chế templating rất thanh lịch được xây dựng trên đầu trang của ejs (http://embeddedjs.com/).Nhúng mẫu ejs vào bên trong mẫu erb

Vấn đề: embeddedjs vay mượn nhiều từ cú pháp erb, do đó, bao gồm các mẫu ejs trong mẫu erb gây ra sự cố hiển thị với chế độ xem.

Có cách nào để bao gồm các phần "không phải" trong tệp erb không? Điều này sẽ cho phép tôi xác định các mẫu ejs bên trong các tệp erb. Ngay bây giờ tôi đang sử dụng một hack, nơi tôi có một helper đọc nội dung thô của một tập tin chứa các mẫu ejs, và xuất nó như là một chuỗi thô trong mẫu erb.

+1

Trong haml, điều này sẽ dễ dàng với bộ lọc ': plain'. http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#plain-filter – Heikki

Trả lời

3

tôi sử dụng thủ thuật này để giải quyết vấn đề:

// Using custom tags to be able to use regular for templates in templates 
var ejs = require('ejs'); 
ejs.open = '{{'; 
ejs.close = '}}'; 

// Using html extension for custom ejs tags 
app.register('.html', ejs); 

app.set('views', __dirname + '/views'); 
app.set('view engine', 'html'); 

này thay đổi <%%> để {{}}, và cho tôi sử dụng <%%> cho các mẫu được sử dụng bởi JS. Điều này phù hợp với tôi vì tôi không có mẫu kiểu cổ điển (<%%>).

Nếu bạn có nhiều thứ bạn có thể muốn thực hiện cùng một thủ thuật nhưng đối với các mẫu underscore.js.

+0

Đây chính xác là những gì tôi muốn, nhưng tôi không chắc chắn làm thế nào để gắn kết này vào Rails. (Tôi không sử dụng dấu gạch dưới, chỉ EJS và JST.) – carpeliam

+0

Chỉ cần tìm ra giải pháp cho vấn đề của tôi - gán EJS.evaluation_pattern cho/\ {\ {([\ s \ S] +?) \} \}/Và EJS .interpolation_pattern vào/\ {\ {= ([\ s \ S] +?) \} \}/trong bộ khởi tạo. – carpeliam

2

Bạn có thể lưu tệp ej dưới dạng tệp riêng biệt và hiển thị tệp dưới dạng văn bản (sẽ không được đánh giá là erb) bên trong thẻ tập lệnh.

Bên ERB bạn phần:

<script id="my_awesome_template" type="text/x-ejs"> 
    <%= render :text => File.open("app/views/controller_name/_my_awesome_template.html.ejs").read %> 
</script>` 

Trong tập tin JavaScript của bạn:

new EJS({element: document.getElementById('my_awesome_template')}).render(data) 
2

thoát biến gạch của bạn: (Những người bạn không muốn ERB để suy)

<%= foo %> becomes: 

<%%= foo %>