2011-09-22 40 views
22

Tôi đã cố gắng sử dụng mẫu underscore.js để tạo khuôn mẫu trong ứng dụng đường ray 2.3, trong đó không phải là có kẹt như một trình đóng gói tài sản.Đường ray với mẫu Underscore.js

Đây là mẫu đơn giản:

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%= title %></span> 
     <span class-"q-text"><%= body %></span> 
    </div> 
</script> 

Rails cố gắng để phân tích các biến như ERB và ném một ArgumentError. Làm cách nào để nhận các mẫu gạch dưới để phát độc đáo với đường ray trong trường hợp này? Tôi làm sai ở đâu?

Trả lời

52

Sử dụng một số dấu phân cách khác thay vì <%= %>. Ví dụ, để sử dụng dấu ngoặc ria mép kiểu {{= }} (Nội suy) và {{ }} (đánh giá), thêm một nơi nào đó để javascript của bạn:

_.templateSettings = { 
    interpolate: /\{\{\=(.+?)\}\}/g, 
    evaluate: /\{\{(.+?)\}\}/g 
}; 
+0

Cảm ơn, công trình này. Tôi đã đi qua các tài liệu cho _.template và _.templateSettings đã được đề cập ở đó, nhưng bằng cách nào đó nó bỏ qua tâm trí của tôi khi tôi đã được thiết lập dự án, và cứ nghĩ rằng điều này có thể bị kẹt liên quan. – papdel

+3

Cảm ơn FYI: http://documentcloud.github.com/underscore/#template và http://stackoverflow.com/questions/5771742/underscore-js-templates-within-jsp – Francois

+6

Sử dụng '{{}}' và ' {{=}} 'có thể gây ra vấn đề nếu bạn muốn sử dụng các khối kiểu' if (x) {} 'trong các mẫu của bạn. Có thể dễ dàng hơn trong trường hợp đó để sử dụng '[%%]' và '[% =%]' thay thế: –

25

Nếu bạn không muốn thay đổi cài đặt mẫu trên toàn bộ dự án của bạn .. .

thoát khỏi ERB thẻ: <%= trở thành <%%=

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
</script> 

Lưu ý rằng thẻ đóng là sti ll %>, không phải %%>.


Lưu ý phụ - Tôi cũng đã thử xuất kết quả bằng cách sử dụng một heredoc. Các mã sau đây chạy thành công nhưng kết quả đầu ra một loạt các mã nguồn erb mà bị bắt giữa các lệnh heredoc.

<script type="text/template" id="q-template"> 
<%= <<-heredoc %> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
heredoc 
</script> 
Các vấn đề liên quan