2012-09-11 32 views
2

插入的JavaScript在HAML下劃線模板奇怪的錯誤在HAML下劃線模板

insurting的JavaScript時,遇到了一個奇怪的錯誤時,這完美的作品:

.button{ :id => "<%= 'class_name' %>" } 

這一次給出了一個錯誤

.button{ :class => "<%= 'class_name' %>" } 

唯一的區別是我使用班級而不是身份證....

JavaScript錯誤:

Uncaught SyntaxError: Unexpected identifier 

UPDATE:

<%=%>來自下劃線模板引擎。所以它不是erb或任何類型的東西。生成哈姆時,我沒有得到一個錯誤,但我得到它與J​​avaScript。

+0

JavaScript正確返回'class_name'?因爲在[HAML](http://codepen.io/anon/pen/peLva)中可以添加類 –

+1

看起來你忘記了'<%= ... %>'來自ERb,而不是來自Haml。 – jdoe

+0

<%= %>這裏不是erb,而是下劃線模板。 –

回答

4

鑑於.button{ :id => "<%= 'class_name' %>" }工作,我假設你有:escape_attrs設置爲false,並可能:attr_wrapper設置爲",這將產生輸出:

<div class="button" id="<%= 'class_name' %>"></div> 

造成您麻煩的位.button{ :class => "<%= 'class_name' %>" }將產生:

<div class="%> 'class_name' <%= button"></div> 

Haml將.語法(button)中的class元素與屬性散列(<%= 'class_name' %>)的類條目的內容組合在一起時,會導致問題。 Haml將後者視爲空格分隔列表,添加button元素,然後對結果數組進行排序,產生您看到的輸出。 (把這個列表看作是一個空格分隔的列表,這對於「純粹的」HTML來說是有意義的,但是當javascript框架以這種方式使用它時會崩潰,排序的原因是爲Haml的測試套件提供一致的類條目順序。

一種解決方法是一起湊不使用.語法和屬性的:class條目 - 只是用class條目:

%div{ :class => "button <%= 'class_name' %>" } 

生產:

<div class="button <%= 'class_name' %>"></div> 

另一個解決方法(您已經發現)是從下劃線模板中刪除空格,因此Haml將其視爲單個實體並且不會將其拆分。

+0

感謝您的真棒解釋! –

+0

針對頻繁問題的精益解決方案。 –

0

這應該工作

.button{:class => "#{class_name}"} 
+0

過於複雜! '.button {:class => class_name}'就足夠了 - 不需要使用帶插值的字符串。 – jdoe

+0

這不是一個ruby/haml錯誤,而是一個javascript錯誤。我使用下劃線模板引擎。 –