HAML中的Javascript内的Ruby方法

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (43)

我有一个向表单添加新字段的jQuery脚本,并且此字段包含数组中的动态信息。问题是,我无法弄清楚如何添加一个array.each来填充javascript内选择字段的选项,而不会破坏HAML缩进并导致错误。

这是我的最佳尝试,不起作用:

%script(type="text/javascript")  
  $('#mylink').click(function() {  
  $('#mylink').after('<select>  
  - myarray.each do |options|  
     <option value="#{options.id}">#{options.name}</option>  
  </select>);  
  )};

也尝试过用:javascript filter,但也没有成功

提问于
用户回答回答于

通常情况下,如果haml中有什么是痛苦的,那就意味着你应该将这个棘手的位重构成一个助手或者部分并且调用它。

// some_helper.rb
def new_snazzy_select_tag(options = [])
  select_tag 'tag_name_here', options.map { |option| [option.id, option.name] }
end

此外,你应该使用:javascript过滤器来呈现JavaScript,因为它会将它放在脚本标记中,并允许缩进。

最后,可以#{ruby_expression}在haml中的任何地方使用,包括:javascript过滤器,当你需要将ruby表达式的结果输出到不直接包含html元素的位置时,这非常方便。

// some_view.html.haml
:javascript
  $('#mylink').click(function() {  
    $('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}");
  };
用户回答回答于

尝试一下,它应该可以工作(我所做的就是删除第五行中的一个空格,并在第六行添加结尾引号):

%script(type="text/javascript")
  $('#mylink').click(function() {
  $('#mylink').after('<select>
  - @myarray.each do |options|
    <option value="#{options.id}">#{options.name}</option>
  </select>');
  )};

扫码关注云+社区