2

在haml下划线模板中插入javascript时出现奇怪的错误

这很完美:

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

这给出了一个错误

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

唯一的区别是我使用 class 而不是 id....

javascript错误:

Uncaught SyntaxError: Unexpected identifier 

更新:

<%= %> 来自下划线模板引擎。所以它不是erb或任何类型的东西。生成haml时我没有收到错误,但我用javascript得到了它。

4

2 回答 2

4

Given.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 将语法 ( ) 中的class元素与属性哈希 ( ) 的类条目的内容组合时,会导致问题。Haml 将后者视为一个空格分隔的列表,添加元素,然后对结果数组进行排序,产生您看到的输出。(像这样将列表视为空格分隔的列表对于“纯”HTML 来说是有意义的,但是当 javascript 框架以这种方式使用它时就会崩溃。排序的原因是为 Haml 的测试套件提供一致的类条目顺序。).button<%= 'class_name' %>button

一种解决方法是不要将.语法和:class属性哈希中的条目一起使用 - 只需使用class条目:

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

产生:

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

另一种解决方法(您已经发现)是从下划线模板中删除空格,因此 Haml 将其视为单个实体并且不会将其拆分。

于 2012-09-11T17:13:25.693 回答
0

这应该工作

.button{:class => "#{class_name}"}
于 2012-09-11T12:44:53.137 回答