2011-11-30 65 views
6

我正在使用Backbone.js,Underscore.js,HAML和Coffeescript构建应用程序。使用Underscore.js内插html属性

我遇到的问题是获取变量插入html元素属性内部。

<% _.each(collection.models, function(document) { %> 
%tr 
    %td 
    %input{:type => 'checkbox', :name => "documents[]", :value => "<%= document.attributes.id %>"} 
    %td <%= document.attributes.id %> 
    %td <%= document.attributes.name %> 

    <% } %> 
<% }); %> 

该对象的值在<td>的内部正常显示,但不能输入的属性值内。

是否可以在元素的属性内进行插值?我无法找到解决方案。

感谢

+0

我没有经历过在这方面,但请看看[这里](https://github.com/9elements/haml-coffee)如果这是你需要的。它支持属性中的coffeescript。 – kubetz

+0

我不确定你的代码有什么问题,但我已经使用了下划线模板的插值。 – Jack

+0

问题是与HTML元素属性内插。 – Chris

回答

0

看起来你是不是在模板关闭功能正常(尝试加入<% }); %>到您的模板的结束)。

我对HAML语法并不十分熟悉,但使用纯HTML和下划线模板的jsfiddle的示例如下。正如你所看到的,你绝对可以在元素属性的中间使用插值。

+0

对不起,我没有包含完整的代码。我正在更新这个问题。 – Chris

+0

感谢您的链接。我看到它们在元素的属性内成功插入。 – Chris

+0

那么问题可能出在你的HAML语法上,因为如果你看看我链接到的jsfiddle,你会发现它在checkbox的value属性中正确插值。 – Jack

4

此问题的解决方案是使用HAML的:escape_attrs选项。

Haml::Engine.new(template, :escape_attrs => false).render 
2

你可以尝试使用html_safe这是一个String对象的方法。这将难逃在变量声明的HTML字符(<例如)和将离开完好下划线在运行时评价:

%input{:type => 'checkbox', :name => "documents[]", :value => "<%= document.attributes.id %>".html_safe} 

(测试轨道3.0.13)

+0

这适用于Rails 3.2。 –

+0

这不适用于Rails 4.2.6,但我不知道为什么。我可以将相同的代码放在一个属性值之外,并且我的'<'不会被转义,而是在属性值内部。 – sameers

+0

我的意思是,[关于html_safe的文档](http://apidock.com/rails/String/html_safe)说'.html_safe'等价于'raw()',但它实际上等价于属性值之外,当通过HAML模板引擎传递时,它不在属性值内部。这非常神秘。 – sameers